#Apache
在CentOS6_x64要使用 httpd 的網頁服務,較有名的就屬 Apache (https://httpd.apache.org/) 與 Nginx (https://nginx.org/) 網頁伺服器軟體,而在 CentOS6_x64 下,Apache為預設的網頁伺服器,亦是世界上最普遍使用的網頁伺服器軟體,另一個為MS IIS(Internet Information Service,http://www.iis.net/)。一般讀者會看到,Linux的高手高手高高手們,有些會說 Apache 主要來處理動態網頁(如PHP處理)的扛霸子,Nginx(唸成 Engine X)則是在靜態網頁處理有執牛耳之地位(就是佞北修瓊),除這兩者之外,當然還有很多 http 伺服器軟體(如 lighthttpd,https://www.lighttpd.net/)。Apache 與 NginX 兩者的歷史緣由就不在贅述,讀者可自行去 Wikipedia 看看,當然也有很多比較兩種軟體的 benchmark 的資訊。當然,也有高手用 Apache 與 Nginx 同時啟用來架網頁伺服器,並分流不同型態的網頁,至不同的伺服器軟體處理。但筆者認為,您可以選一樣即可,用 apache(https://en.wikipedia.org/wiki/Apache_HTTP_Server) 或是 Nginx(https://en.wikipedia.org/wiki/Nginx ),因兩者都可以同時處理靜態與動態的網頁,就是依讀者習慣做選擇 (老話一句,您送丟後),筆者個人是習慣用 Apache 來當工作的網頁伺服器軟體。
一開始,先說明 Apache 的設定。先利用 yum -y install httpd 來下載 Apache httpd,CentOS6_x64下皆以 httpd 來作為 Apache 的套件名稱。如圖4-22
(圖4-22)
緊接著,我們利用指令 vim /etc/httpd/conf/httpd.conf,來編輯設定檔 /etc/httpd/conf/httpd.conf,因為設定檔太長,筆者以下直接說明該修改的參數數值,再提醒聰明的讀者,設定前,皆要仔細閱讀檔案內的說明內容,有些有關 SELinux 對該服務的設定開放方式,會寫在裡面喔:
ServerTokens Prod
/* 為了系統資訊安全性,使用 Prod 表僅傳回顯示系統資訊為 Server: Apache,而無版本與作業系統版本或模組版本等資訊,預設值 OS ,會顯示版本資訊與作業系統種類 */
KeepAlive On
/* 設定保持 httpd服務連線,此設定開啟時,參數 MaxKeepAliveRequests 的值與 KeepAliveTimeout 值,則會引入 */
MaxKeepAliveRequiests 500
/* 保持每次最大連線數為 500 sessions,建議範圍為100 - 500 */
KeepAliveTimeout 5
/* 僅等待下一次的傳輸秒數為 5 秒 ,建議範圍為 2 - 5 */
Listen 192.168.100.200:80
/* 若有多個 IP,用預設值則會對所有IP開放 80埠的服務,若僅一個IP則不影響。筆者僅設定一個IP,亦可以設定兩個真實IP,如接著再設定 Listen 192.168.100.201:80,再將 192.168.100.201 設成 virtualhost,就可以用不同的 html根目錄來做到不同的網站服務 */
ServerAdmin idontknow@url.com
/* 管理者的 email 地址 */
DocumentRoot "/var/www/html"
/* 主要存放 index.html 等網站首頁的位置,若您的IP為192.168.100.200,對應的 hostname 為 www.mylinux.com ( 真實 IP 為視 DNS Server 的解析配對名稱),則若在此位置下放置 index.html 檔,在瀏覽器打上 www.mylinux.com ,即可顯示 index.html 的內容,若您不願意讓搜尋引擎搜到 DcumentRoot 內的資料夾內容,亦可在這資料夾下新增一檔案 robots.txt ,其內容為以下:
User-agent: *
Disallow: /
allow: /index.html # 表示僅允許搜尋引擎紀錄 index.html
*/
<Directory "/var/www/html"> # 設定個別資料夾路徑的權限,此路徑為 DocumentRoot
Options FollowSymLinks # 如果這個資料夾是虛擬連結,亦可使用
AllowOverride None /* 若要使用 .htaccess 設定檔來限定帳密權限,則AllowOverride值設為 AuthConfig,或是設定為 All,用以接受 .htaccess 之參數( https://httpd.apache.org/docs/current/howto/htaccess.html) */
Order allow, deny # 設定瑞非允許的IP,皆為拒絕存取此資料夾
Allow from all # 允許全部的IP皆可存取此資料夾,all可換成允許的 IP 或 hostname
</Directory>
/* 以上個別資料夾的設定相當重要,可以設定成需認證帳號密碼,與何 IP 範圍才能看到資料夾下的網頁頁面,詳細可參考http://httpd.apache.org/docs/2.2/mod/core.html#options */
<IfModule mod_userdir.c>
# UserDir disabled
userDir public_html
</Ifmodule>
/* 設定是否開放使用者亦可在家目錄建個人網頁,UserDir 預設為 disabled,則不允許個人網頁,若允許則須加上 # 符號,來移除UserDir disabled,並且移除在 userDir 前面的符號 # ,讓 ~/public_html 變成每個使用者的個人網頁根目錄(DocumentRoot),需注意SElinux對網頁根目錄之限制 httpd 的權限,記得要利用以下指令開啟SELinux的homedirs 限制:
$ setsebool -P httpd_enable_homedirs=1
$ setsebool -P httpd_read_user_content=1
除此之外,亦注意 /home/*/public_html 必須為更改權限為 755 ,且 /home/*,必須更改權限至少為 711。
*/
DirectoryIndex index.html index.htm index.php
/* 加入 index.php 增加對 index.php 為首頁格式的支援 */
ServerSignature Off
/* 使用 Off 可以關閉錯誤訊息包含伺服器名稱,故可關閉或是設定為 Email ,表示錯誤資訊頁面,僅有管理者 Email 地址 */
若不需使用到 Option Indexes所顯示之Index 頁面,將以下 icons FancyIndexing 功能關閉,約551行:
# Alias /icons/ "/var/www/icons/"
#<Directory "/var/www/icons">
# Options Indexes MultiViews FollowSymLinks
# AllowOverride None
# Order allow,deny
# Allow from all
#</Directory>
DefaultLanguage en
<VirtualHost 192.168.100.200:80>
ServerAdmin idontknow@url.com
DocumentRoot /var/www2
ServerName www2.mylinux.com
ErrorLog logs/www2.mylinux.com-error_log
CustomLog logs/www2.mylinux.com-access_log common
</VirtualHost>
/* 以上為設定虛擬網站方式,假定同一 IP要提供很多網站的服務 ,或也要讓 VirtualHost 使用 port 443,請在設定 VirtualHost 資料夾前加上 NameVirtualHost *:443,再多一個<VirtualHost 192.168.100.200: 443 ></VirtualHost> 設定即可,再進入 /etc/httpd/conf.d/ssl.conf,設定 ssl 憑證路徑,檔案內容亦有https(使用 mod_ssl )的 <VirtualHost _default_:443 ></VirtualHost>設定 */
若要限制某一資料夾需認證帳號密碼存取,我們可利用以下:
<Directory "/var/www/html/myprivate">
Option FollowSymLinks
AllowOverride AuthConfig
Order allow, deny
Allow from 192.168.100.
</Directory>
/* 若有一私有資料夾 myprivate 僅允許內網IP,並須帳號密碼驗證,則我們需要在此資料夾下新增兩個隱藏檔 .htaccess 設定對資料夾存取的參數,與 .htpasswd 對可讀取的帳號密碼存放位置
.htaccess 內容如下:
AuthType Basic
AuthUserFile /var/www/html/myprivate/.htpasswd
Auth Name "My private folder"
require valid-user
----------------------------------------------------------------
接著利用指令產生可使用的帳號密碼:
$ cd /var/www/html/myprivate
$ htpasswd -c youraccount
/* 第一次要產生 .htpasswd 檔案,需加上參數 -c ,之後要增加可存取使用者不需加上參數,.htpasswd內的密碼為使用 MD5 加密的明碼。*/
以上設定完,儲存後離開並重啟動Apache伺服器軟體後,瀏覽無ssl加密的 http://127.0.0.1(localhost) ,已可看到如圖4-23-1。但還須接著設定 ssl 加密 ,我們先利用下面指令來產生私鑰:
$ cd /etc/httpd # 先進入 /etc/httpd 的設定檔路徑,或是 /etc/pki/tls
$ openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout myhttpd.key -out myhttpd.pem
/* 同樣產生十年的金鑰與憑證,但因沒經過第三方認證,故使用瀏覽器讀取時,會出現如圖4-23-2,點選允許例外一樣可以瀏覽。若有商業需求,請至第三方憑證發行單位購買,如https://www.verisign.com/ 或 http://www.twca.com.tw/portal/product/ssl_3.html,或是可以用免費但90天要更新的憑證發行單位,https://letsencrypt.org/ */
緊接著在 /etc/httpd/conf.d/ssl.conf 設定上述金鑰 myhttpd.pem 與憑證 myhttpd.key
SSLCertificateFile /etc/httpd/myhttpd.pem
SSLCertificateKeyFile /etc/httpd/myhttpd.key
與開啓以下設定
DocumentRoot /var/www/html
ServerName *.*.*.*:443 # 此*.*.*.* 端看您的Server Domain Name 爲何
$ service httpd restart
$ chkconfig --level 235 httpd on
$ netstat -tlnp | grep 443 # 查詢是否有在監聽
若皆要導到 https,請在 http.conf 內的<VirtualHost *.*.*.*:80> </VirtualHost>內,
加上如下
Redirect permanent / https//*.*.*.* # *.*.*.*您的domain name
(圖4-23-1)
(圖4-23-2)
開啟防火牆允許規則
$ iptables -A INPUT -p tcp --dport 80 -j ACCEPT
$ iptables -A INPUT -p tcp --dport 443 -j ACCEPT
若是躲在防火牆之 NAT 後方的 httpd 伺服器,可以設定先利用 PREROUTING chain 及允許 iptables FORWARD chain ( https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/4/html/Security_Guide/s1-firewall-ipt-fwd.html )
$ iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.100.200
/* http://linux-ip.net/html/nat-dnat.html */
並允許 FORWARD chain:
$ iptables -A FORWARD -i eth0 -p tcp --dport 80 -d 192.168.100.200
$ service iptables save
開放 SELinux 的 httpd 規則
$ setsebool -P httpd_read_user_content=true
/* 為了個人家目錄內的 public_html 資料夾,用來放置使用者帳號的個人網頁資料 */
$ chcon -Rv --type=httpd_sys_content_t /var/www/html
/* 增加 /var/www/html 為讓 SELinux 允許可讓 httpd 所開放的內容 */
$ semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
/* 要下載 SElinux tool( yum -y install policycoreutils-python ),才能利用指令 semanage,加入 SElinux 允許 httpd 永久對網頁所使用的資料夾,與其內的子資料夾之檔案做開放 */
$ semanage port -a -t http_port_t -p tcp 443
/* 利用指令 semanage,開啟對 tcp port 443 的允許。 */
其他關於 Apache 2.2.X 的詳細參數,可以參考 apache 的網站說明,http://httpd.apache.org/docs/2.2/en/
# Nginx
關於安裝 Nginx 的部分,亦可以先由 yum install nginx 或 yum -y install nginx (記得要先有 epel-release,連看不想看的下一步懶人裝法,如圖4-24
(圖4-24)
啟動 Nginx前,我們先利用 service httpd stop,停掉我們的 Apache 服務吧。nginx下載後直接 service nginx start 啟動即可(圖4-25),好,哈哈收工,下去領500。就這樣?對,不是眼睛業障重,最基本的就是 Nginx 伺服器如此,瀏覽器網址列輸入 localhost(127.0.0.1), 便可以展示靜態 HTML 網頁。雖是如此,筆者還是需做一些設定的介紹,讓讀者可以像調整 Apache 參數一樣,可以多調整 Nginx。Nginx 的設定檔為 /etc/nginx/nginx.conf,檔案內容很少,如圖4-25,讀者們有沒有更愛上它了呢?
(圖4-25)
我們來修改 /etc/nginx/nginx.conf 參數(圖4-26)看看,是否發揮他的效能,以下僅列出要改的參數值,其餘數值維持預設即可:
worker_processes 2;
/* 端看您的 CPU 核心數目,筆者核心數為 2 核心,亦可由指令 cat /proc/cpuinfo | grep processor 得知。如真的懶得知道硬體規格,亦可以直接使用 auto 即可 */
events { # 僅提出要修改處,其餘維持預設值
worker_connection 10240;
multi_accept on;
use epoll;
}
/* 用 ulimit -n 可以查到系統可同時開啟的檔案數,我們利用編輯 /etc/security/limits.conf,將系統的安全限制打開至最大 65535 或 0 (無限制),如圖4-27,但 worker_connection 不要設定到最大值,僅先給定 10240(要注意 worker_processes數值 * worker_connection數值是否會超過 limit 數值 65535 ),表示每秒可以接受10240個使用者連線 ,通常端看伺服器能承受的負載程度。 */
http{ # 僅提出要修改處,其餘維持預設值
keepalive_timeout 5; #設定如 Apache ,代表每次連線的暫停時間,以提高連線可接受次數
gzip on
}
(圖4-26)
(圖4-27)
若需要使用架設多網站功能,則須設定 nginx VirtualHost 設定檔放置於 /etc/nginx/conf.d/virtual.conf,如圖4-28,一樣可導到 /usr/share/nginx/vhost ( 預設的 Nginx root document 為 /usr/share/nginx/html )資料夾內的 index.html 內容。listen 的部分,就端看您的 IP ,只因筆者皆在 VM 下實作,故皆設127.0.0.1。最後記得要開放 SELinux 的允許 http 存取的 port,指令如下:
$ semanage port -a -t http_port_t -p tcp 8080
(圖4-28)
最後,與Apache同樣的,我們一樣要讓 nginx 可以使用 ssl 來加密,以下再產生一個十年憑證:
$ cd /etc/nginx # 先進入 /etc/nginx 的設定檔路徑,或是 /etc/pki/tls
$ openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout mynginx.key -out mynginx.pem
將以上產生的金鑰與憑證加入 /etc/nginx/conf.d/ssl.conf 的內容裡,並去除一些參數前的 # 符號,如圖 4-29
(圖4-29)
上述的參數設定修改完,儲存後離開,記得要開啟防火牆允許 Nginx有使用到的 port:
$ iptables -A INPUT -p tcp --dport 80,443 -j ACCEPT
$ iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
$ service iptables save
與 SELinux 的限制
$ semanage port -a -t http_port_t -p tcp 443
$ semanage port -a -t http_port_t -p tcp 8080
其中SELinux對網頁資料夾的限制,一樣要開啟權限允許
$ chcon -Rv --type=httpd_sys_content_t /var/www
$ semanage fcontext -a -t httpd_sys_content_t "/var/www(/.*)?"
/* 端看您的 VirtualHost 所存放資料的位置 */
以上 iptables 與 SELinux 設定允許後,對於非 localhost 的連接埠才能使用服務,對於對外開放的網頁伺服器,才有網頁服務的能力。
一樣將 nginx 加入開機執行,並重啟動它來服務吧!
$ chkconfig --level 235 nginx on
$ service nginx restart
讀者若需要了解更多 nginx 參數設定,請參考 http://nginx.org/en/docs/
以上為 Apache 與 Nginx 設定靜態網頁的功能,若要使用互動式的網頁,這樣沒有引入CGI 模組的狀態下,是無法解析(parse)如 .php 網頁這種動態的頁面,故下一節我們便要接著提到使用 PHP 的直譯器模組,引入 Apache(使用mod_php) 與 Nginx (使用 PHP-FPM) 來使用,並配合安裝 MySQL/ MariaDB 與 相當好用的 資料庫網頁管理軟體 phpMyAdmin (https://www.phpmyadmin.net/)。當這些技術都學會後,就可以架設單位或公司的"關番碗讚"(官方網站),再也不需求人了。
在CentOS6_x64要使用 httpd 的網頁服務,較有名的就屬 Apache (https://httpd.apache.org/) 與 Nginx (https://nginx.org/) 網頁伺服器軟體,而在 CentOS6_x64 下,Apache為預設的網頁伺服器,亦是世界上最普遍使用的網頁伺服器軟體,另一個為MS IIS(Internet Information Service,http://www.iis.net/)。一般讀者會看到,Linux的高手高手高高手們,有些會說 Apache 主要來處理動態網頁(如PHP處理)的扛霸子,Nginx(唸成 Engine X)則是在靜態網頁處理有執牛耳之地位(就是佞北修瓊),除這兩者之外,當然還有很多 http 伺服器軟體(如 lighthttpd,https://www.lighttpd.net/)。Apache 與 NginX 兩者的歷史緣由就不在贅述,讀者可自行去 Wikipedia 看看,當然也有很多比較兩種軟體的 benchmark 的資訊。當然,也有高手用 Apache 與 Nginx 同時啟用來架網頁伺服器,並分流不同型態的網頁,至不同的伺服器軟體處理。但筆者認為,您可以選一樣即可,用 apache(https://en.wikipedia.org/wiki/Apache_HTTP_Server) 或是 Nginx(https://en.wikipedia.org/wiki/Nginx ),因兩者都可以同時處理靜態與動態的網頁,就是依讀者習慣做選擇 (老話一句,您送丟後),筆者個人是習慣用 Apache 來當工作的網頁伺服器軟體。
一開始,先說明 Apache 的設定。先利用 yum -y install httpd 來下載 Apache httpd,CentOS6_x64下皆以 httpd 來作為 Apache 的套件名稱。如圖4-22
(圖4-22)
緊接著,我們利用指令 vim /etc/httpd/conf/httpd.conf,來編輯設定檔 /etc/httpd/conf/httpd.conf,因為設定檔太長,筆者以下直接說明該修改的參數數值,再提醒聰明的讀者,設定前,皆要仔細閱讀檔案內的說明內容,有些有關 SELinux 對該服務的設定開放方式,會寫在裡面喔:
ServerTokens Prod
/* 為了系統資訊安全性,使用 Prod 表僅傳回顯示系統資訊為 Server: Apache,而無版本與作業系統版本或模組版本等資訊,預設值 OS ,會顯示版本資訊與作業系統種類 */
KeepAlive On
/* 設定保持 httpd服務連線,此設定開啟時,參數 MaxKeepAliveRequests 的值與 KeepAliveTimeout 值,則會引入 */
MaxKeepAliveRequiests 500
/* 保持每次最大連線數為 500 sessions,建議範圍為100 - 500 */
KeepAliveTimeout 5
/* 僅等待下一次的傳輸秒數為 5 秒 ,建議範圍為 2 - 5 */
Listen 192.168.100.200:80
/* 若有多個 IP,用預設值則會對所有IP開放 80埠的服務,若僅一個IP則不影響。筆者僅設定一個IP,亦可以設定兩個真實IP,如接著再設定 Listen 192.168.100.201:80,再將 192.168.100.201 設成 virtualhost,就可以用不同的 html根目錄來做到不同的網站服務 */
ServerAdmin idontknow@url.com
/* 管理者的 email 地址 */
DocumentRoot "/var/www/html"
/* 主要存放 index.html 等網站首頁的位置,若您的IP為192.168.100.200,對應的 hostname 為 www.mylinux.com ( 真實 IP 為視 DNS Server 的解析配對名稱),則若在此位置下放置 index.html 檔,在瀏覽器打上 www.mylinux.com ,即可顯示 index.html 的內容,若您不願意讓搜尋引擎搜到 DcumentRoot 內的資料夾內容,亦可在這資料夾下新增一檔案 robots.txt ,其內容為以下:
User-agent: *
Disallow: /
allow: /index.html # 表示僅允許搜尋引擎紀錄 index.html
*/
<Directory "/var/www/html"> # 設定個別資料夾路徑的權限,此路徑為 DocumentRoot
Options FollowSymLinks # 如果這個資料夾是虛擬連結,亦可使用
AllowOverride None /* 若要使用 .htaccess 設定檔來限定帳密權限,則AllowOverride值設為 AuthConfig,或是設定為 All,用以接受 .htaccess 之參數( https://httpd.apache.org/docs/current/howto/htaccess.html) */
Order allow, deny # 設定瑞非允許的IP,皆為拒絕存取此資料夾
Allow from all # 允許全部的IP皆可存取此資料夾,all可換成允許的 IP 或 hostname
</Directory>
/* 以上個別資料夾的設定相當重要,可以設定成需認證帳號密碼,與何 IP 範圍才能看到資料夾下的網頁頁面,詳細可參考http://httpd.apache.org/docs/2.2/mod/core.html#options */
<IfModule mod_userdir.c>
# UserDir disabled
userDir public_html
</Ifmodule>
/* 設定是否開放使用者亦可在家目錄建個人網頁,UserDir 預設為 disabled,則不允許個人網頁,若允許則須加上 # 符號,來移除UserDir disabled,並且移除在 userDir 前面的符號 # ,讓 ~/public_html 變成每個使用者的個人網頁根目錄(DocumentRoot),需注意SElinux對網頁根目錄之限制 httpd 的權限,記得要利用以下指令開啟SELinux的homedirs 限制:
$ setsebool -P httpd_enable_homedirs=1
$ setsebool -P httpd_read_user_content=1
除此之外,亦注意 /home/*/public_html 必須為更改權限為 755 ,且 /home/*,必須更改權限至少為 711。
*/
DirectoryIndex index.html index.htm index.php
/* 加入 index.php 增加對 index.php 為首頁格式的支援 */
ServerSignature Off
/* 使用 Off 可以關閉錯誤訊息包含伺服器名稱,故可關閉或是設定為 Email ,表示錯誤資訊頁面,僅有管理者 Email 地址 */
若不需使用到 Option Indexes所顯示之Index 頁面,將以下 icons FancyIndexing 功能關閉,約551行:
# Alias /icons/ "/var/www/icons/"
#<Directory "/var/www/icons">
# Options Indexes MultiViews FollowSymLinks
# AllowOverride None
# Order allow,deny
# Allow from all
#</Directory>
DefaultLanguage en
<VirtualHost 192.168.100.200:80>
ServerAdmin idontknow@url.com
DocumentRoot /var/www2
ServerName www2.mylinux.com
ErrorLog logs/www2.mylinux.com-error_log
CustomLog logs/www2.mylinux.com-access_log common
</VirtualHost>
/* 以上為設定虛擬網站方式,假定同一 IP要提供很多網站的服務 ,或也要讓 VirtualHost 使用 port 443,請在設定 VirtualHost 資料夾前加上 NameVirtualHost *:443,再多一個<VirtualHost 192.168.100.200: 443 ></VirtualHost> 設定即可,再進入 /etc/httpd/conf.d/ssl.conf,設定 ssl 憑證路徑,檔案內容亦有https(使用 mod_ssl )的 <VirtualHost _default_:443 ></VirtualHost>設定 */
若要限制某一資料夾需認證帳號密碼存取,我們可利用以下:
<Directory "/var/www/html/myprivate">
Option FollowSymLinks
AllowOverride AuthConfig
Order allow, deny
Allow from 192.168.100.
</Directory>
/* 若有一私有資料夾 myprivate 僅允許內網IP,並須帳號密碼驗證,則我們需要在此資料夾下新增兩個隱藏檔 .htaccess 設定對資料夾存取的參數,與 .htpasswd 對可讀取的帳號密碼存放位置
.htaccess 內容如下:
AuthType Basic
AuthUserFile /var/www/html/myprivate/.htpasswd
Auth Name "My private folder"
require valid-user
----------------------------------------------------------------
接著利用指令產生可使用的帳號密碼:
$ cd /var/www/html/myprivate
$ htpasswd -c youraccount
/* 第一次要產生 .htpasswd 檔案,需加上參數 -c ,之後要增加可存取使用者不需加上參數,.htpasswd內的密碼為使用 MD5 加密的明碼。*/
以上設定完,儲存後離開並重啟動Apache伺服器軟體後,瀏覽無ssl加密的 http://127.0.0.1(localhost) ,已可看到如圖4-23-1。但還須接著設定 ssl 加密 ,我們先利用下面指令來產生私鑰:
$ cd /etc/httpd # 先進入 /etc/httpd 的設定檔路徑,或是 /etc/pki/tls
$ openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout myhttpd.key -out myhttpd.pem
/* 同樣產生十年的金鑰與憑證,但因沒經過第三方認證,故使用瀏覽器讀取時,會出現如圖4-23-2,點選允許例外一樣可以瀏覽。若有商業需求,請至第三方憑證發行單位購買,如https://www.verisign.com/ 或 http://www.twca.com.tw/portal/product/ssl_3.html,或是可以用免費但90天要更新的憑證發行單位,https://letsencrypt.org/ */
緊接著在 /etc/httpd/conf.d/ssl.conf 設定上述金鑰 myhttpd.pem 與憑證 myhttpd.key
SSLCertificateFile /etc/httpd/myhttpd.pem
SSLCertificateKeyFile /etc/httpd/myhttpd.key
與開啓以下設定
DocumentRoot /var/www/html
ServerName *.*.*.*:443 # 此*.*.*.* 端看您的Server Domain Name 爲何
$ service httpd restart
$ chkconfig --level 235 httpd on
$ netstat -tlnp | grep 443 # 查詢是否有在監聽
若皆要導到 https,請在 http.conf 內的<VirtualHost *.*.*.*:80> </VirtualHost>內,
加上如下
Redirect permanent / https//*.*.*.* # *.*.*.*您的domain name
(圖4-23-1)
(圖4-23-2)
開啟防火牆允許規則
$ iptables -A INPUT -p tcp --dport 80 -j ACCEPT
$ iptables -A INPUT -p tcp --dport 443 -j ACCEPT
若是躲在防火牆之 NAT 後方的 httpd 伺服器,可以設定先利用 PREROUTING chain 及允許 iptables FORWARD chain ( https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/4/html/Security_Guide/s1-firewall-ipt-fwd.html )
$ iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.100.200
/* http://linux-ip.net/html/nat-dnat.html */
並允許 FORWARD chain:
$ iptables -A FORWARD -i eth0 -p tcp --dport 80 -d 192.168.100.200
$ service iptables save
開放 SELinux 的 httpd 規則
$ setsebool -P httpd_read_user_content=true
/* 為了個人家目錄內的 public_html 資料夾,用來放置使用者帳號的個人網頁資料 */
$ chcon -Rv --type=httpd_sys_content_t /var/www/html
/* 增加 /var/www/html 為讓 SELinux 允許可讓 httpd 所開放的內容 */
$ semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
/* 要下載 SElinux tool( yum -y install policycoreutils-python ),才能利用指令 semanage,加入 SElinux 允許 httpd 永久對網頁所使用的資料夾,與其內的子資料夾之檔案做開放 */
$ semanage port -a -t http_port_t -p tcp 443
/* 利用指令 semanage,開啟對 tcp port 443 的允許。 */
其他關於 Apache 2.2.X 的詳細參數,可以參考 apache 的網站說明,http://httpd.apache.org/docs/2.2/en/
# Nginx
關於安裝 Nginx 的部分,亦可以先由 yum install nginx 或 yum -y install nginx (記得要先有 epel-release,連看不想看的下一步懶人裝法,如圖4-24
(圖4-24)
啟動 Nginx前,我們先利用 service httpd stop,停掉我們的 Apache 服務吧。nginx下載後直接 service nginx start 啟動即可(圖4-25),好,哈哈收工,下去領500。就這樣?對,不是眼睛業障重,最基本的就是 Nginx 伺服器如此,瀏覽器網址列輸入 localhost(127.0.0.1), 便可以展示靜態 HTML 網頁。雖是如此,筆者還是需做一些設定的介紹,讓讀者可以像調整 Apache 參數一樣,可以多調整 Nginx。Nginx 的設定檔為 /etc/nginx/nginx.conf,檔案內容很少,如圖4-25,讀者們有沒有更愛上它了呢?
(圖4-25)
我們來修改 /etc/nginx/nginx.conf 參數(圖4-26)看看,是否發揮他的效能,以下僅列出要改的參數值,其餘數值維持預設即可:
worker_processes 2;
/* 端看您的 CPU 核心數目,筆者核心數為 2 核心,亦可由指令 cat /proc/cpuinfo | grep processor 得知。如真的懶得知道硬體規格,亦可以直接使用 auto 即可 */
events { # 僅提出要修改處,其餘維持預設值
worker_connection 10240;
multi_accept on;
use epoll;
}
/* 用 ulimit -n 可以查到系統可同時開啟的檔案數,我們利用編輯 /etc/security/limits.conf,將系統的安全限制打開至最大 65535 或 0 (無限制),如圖4-27,但 worker_connection 不要設定到最大值,僅先給定 10240(要注意 worker_processes數值 * worker_connection數值是否會超過 limit 數值 65535 ),表示每秒可以接受10240個使用者連線 ,通常端看伺服器能承受的負載程度。 */
http{ # 僅提出要修改處,其餘維持預設值
keepalive_timeout 5; #設定如 Apache ,代表每次連線的暫停時間,以提高連線可接受次數
gzip on
}
(圖4-26)
(圖4-27)
若需要使用架設多網站功能,則須設定 nginx VirtualHost 設定檔放置於 /etc/nginx/conf.d/virtual.conf,如圖4-28,一樣可導到 /usr/share/nginx/vhost ( 預設的 Nginx root document 為 /usr/share/nginx/html )資料夾內的 index.html 內容。listen 的部分,就端看您的 IP ,只因筆者皆在 VM 下實作,故皆設127.0.0.1。最後記得要開放 SELinux 的允許 http 存取的 port,指令如下:
$ semanage port -a -t http_port_t -p tcp 8080
(圖4-28)
最後,與Apache同樣的,我們一樣要讓 nginx 可以使用 ssl 來加密,以下再產生一個十年憑證:
$ cd /etc/nginx # 先進入 /etc/nginx 的設定檔路徑,或是 /etc/pki/tls
$ openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout mynginx.key -out mynginx.pem
將以上產生的金鑰與憑證加入 /etc/nginx/conf.d/ssl.conf 的內容裡,並去除一些參數前的 # 符號,如圖 4-29
(圖4-29)
上述的參數設定修改完,儲存後離開,記得要開啟防火牆允許 Nginx有使用到的 port:
$ iptables -A INPUT -p tcp --dport 80,443 -j ACCEPT
$ iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
$ service iptables save
與 SELinux 的限制
$ semanage port -a -t http_port_t -p tcp 443
$ semanage port -a -t http_port_t -p tcp 8080
其中SELinux對網頁資料夾的限制,一樣要開啟權限允許
$ chcon -Rv --type=httpd_sys_content_t /var/www
$ semanage fcontext -a -t httpd_sys_content_t "/var/www(/.*)?"
/* 端看您的 VirtualHost 所存放資料的位置 */
以上 iptables 與 SELinux 設定允許後,對於非 localhost 的連接埠才能使用服務,對於對外開放的網頁伺服器,才有網頁服務的能力。
一樣將 nginx 加入開機執行,並重啟動它來服務吧!
$ chkconfig --level 235 nginx on
$ service nginx restart
讀者若需要了解更多 nginx 參數設定,請參考 http://nginx.org/en/docs/
以上為 Apache 與 Nginx 設定靜態網頁的功能,若要使用互動式的網頁,這樣沒有引入CGI 模組的狀態下,是無法解析(parse)如 .php 網頁這種動態的頁面,故下一節我們便要接著提到使用 PHP 的直譯器模組,引入 Apache(使用mod_php) 與 Nginx (使用 PHP-FPM) 來使用,並配合安裝 MySQL/ MariaDB 與 相當好用的 資料庫網頁管理軟體 phpMyAdmin (https://www.phpmyadmin.net/)。當這些技術都學會後,就可以架設單位或公司的"關番碗讚"(官方網站),再也不需求人了。