Nginx是當今最流行的WEB伺服器一,其特性主要有以下幾點:
1.子產品化設計、較好的擴充性
Nginx雖然支援子產品化,但尚不能向HTTPD那樣支援動态子產品加載
2.高可靠
Nginx工作時,由主要程序master直接生成多個worker程序,主要程序負責解析配置檔案,并啟動子程序,子程序直接負責處理用戶端連接配接請求。
3.低記憶體消耗
Nginx采用了分階段資源配置設定技術,使得其cpu和記憶體占用率極低,官方宣稱10000個keepalive的nginx連接配接隻需要2.5M記憶體。
4.支援熱部署
在不停機的情況下可更新配置檔案、實作日志滾動甚至更新程式版本。
5.支援事件驅動機制、AIO、mmap
Nginx能很好地支援事件驅動機制、異步IO機制和記憶體映射機制
Nginx的重要功能:
1.成為靜态資源的WEB伺服器
Nginx也可以向HTTPD一樣成為靜态頁面伺服器,但需要安裝http子產品
2.支援http、smtp、pop3協定的反向代理
可設定Nginx把來自基于http、smtp、pop3協定的請求修改後發送給其他伺服器。
3.支援緩存和負載均衡機制
支援緩存加速且可把來自用戶端的請求發送給後端的多台伺服器,以實作負載均衡的機制。
4.支援FCGI,UWCGI子產品
可以基于FCGI模式把動态内容發送給後端的php伺服器,或者基于UWCGI模式把python編寫的WEB應用程式發給後端的python解釋伺服器。
5.支援SSL
可以基于SSL提供HTTPS服務
接下來就将對Nginx的配置以實驗的方式進行示範
場景一:Nginx扮演靜态頁面伺服器的角色工作
1.配置各種虛拟主機
(1) 編輯配置檔案/etc/nginx/nginx.conf在http{}部分内添加如下内容
server {
listen 172.16.35.4:80;
server_name www.nginx.com;
root "/var/nginx/nginx.com";
index index.html index.php;
}
server {
listen 172.16.35.6:80;
server_name www.nginx1.com;
root "/var/nginx/nginx.com1";
index index.html index.php;
}
server {
listen 172.16.35.6:8080;
server_name www.nginx2.com;
root "/var/nginx/nginx.com2";
index index.html index.php;
}
server {
listen 172.16.35.4:80;
server_name www.nginx3.com;
root "/var/nginx/nginx.com3";
index index.html index.php;
}
(2) 建立虛拟主機目錄,并提供首頁和修改權限
#建立虛拟主機目錄
[root@localhost ~]# mkdir -pv /var/nginx/{nginx.com,nginx.com1,nginx.com2,nginx.com3}
mkdir: created directory `/var/nginx/nginx.com'
mkdir: created directory `/var/nginx/nginx.com1'
mkdir: created directory `/var/nginx/nginx.com2'
mkdir: created directory `/var/nginx/nginx.com3'
#:為各虛拟主機提供配置檔案
[root@localhost ~]# touch "this is nginx.com">/var/nginx/nginx.com/index.html
[root@localhost ~]# echo "this is nginx.com1">/var/nginx/nginx.com1/index.html
[root@localhost ~]# echo "this is nginx.com2">/var/nginx/nginx.com2/index.html
[root@localhost ~]# echo "this is nginx.com3">/var/nginx/nginx.com3/index.html
#:修改屬主和屬組
[root@localhost ~]# chown -R nginx.nginx /var/nginx/
(3) 配置網卡子接口和重新開機服務并測試
#配置網卡子接口
[root@localhost ~]# ifconfig eth0:1 172.16.35.6/16
[root@localhost ~]# ifconfig eth0:2 172.16.35.4/16
#測試nginx配置檔案文法後
[root@localhost ~]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
#通知nginx重讀配置檔案
[root@localhost ~]# /usr/local/nginx/sbin/nginx -s reload
#測試
修改/etc/hosts
測試
2.自定義定向錯誤頁面和通路控制
(1) 自定義定向錯誤頁面
# 修改配置檔案
#在根目錄下建立此檔案,并添加内容
[root@localhost nginx.com]# echo "o no the sources is not find you get some information from www.nginx.org">/var/nginx/nginx.com/404page.html
(2)通路控制
#基于用戶端的通路控制
設定拒絕實體機(172.16.250.121)通路
用實體機測試
#基于使用者的通路控制
修改配置檔案
使用htpasswd指令向檔案中增加使用者資訊
(3)使用Nginx+SSL實作HTTPS
#生成證書
生成自簽證書
[root@localhost CA]# (umask 077;openssl genrsa -out private/cakey.pem)
[root@localhost CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650#根據提示輸入相關資訊
[root@localhost CA]# touch index.txt
[root@localhost CA]# echo "01">serial
[root@localhost CA]# mkdir /etc/nginx/ssl
[root@localhost CA]# cd /etc/nginx/ssl
[root@localhost ssl]# (umsak 077;openssl genrsa -out nginx.key 2014)
[root@localhost ssl]# cd /etc/pki/CA/
[root@localhost CA]# openssl ca -in /etc/nginx/ssl/nginx.csr -out /etc/nginx/ssl/nginx.crt -days 3650
#修改配置檔案
在主配置檔案的http{}部分内添加如下一行
include /etc/nginx/conf.d/ssl.conf;
修改ssl配置檔案/etc/nginx/conf.d/ssl.conf
server {
listen 443;
server_name www.ssl.com ;
root /var/www/ssl
ssl on;
ssl_certificate /etc/nginx/ssl/nginx.crt;#證書存放位置
ssl_certificate_key /etc/nginx/ssl/nginx.key;#私鑰存放位置
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
}
建立虛拟主機目錄并為其提供首頁
[root@localhost CA]# mkdir /var/www/ssl
[root@localhost CA]# echo "ssl test" >/var/www/ssl/index.html
重新開機服務測試
[root@localhost CA]# nginx -s reload
場景二:反向代理動态請求至動态頁面伺服器
在此以Linux+Nginx+MariaDB+PHP示範如何編譯安裝
#編譯Nginx
下載下傳并解壓Nginx源碼檔案到/usr/local目錄下
安裝pcre-devel包,有時還需要安裝其他包,讀者可根據提示操作即可
[root@localhost nginx-1.4.7]# yum install pcre-devel -y
添加用于運作Nginx的系統使用者
[root@localhost nginx-1.4.7]# useradd -r nginx
執行./configure
./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --user=nginx --group=nginx --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_mp4_module --http-client-body-temp-path=/var/tmp/nginx/client --http-proxy-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi
然後安裝
make && make install
添加bash查找路徑
[root@localhost ~]# echo "export PATH=/usr/local/nginx/sbin:$PATH" >/etc/profile.d/nginx.sh
[root@localhost ~]# . /etc/profile.d/nginx.sh
#編譯PHP
解壓php包後切換目錄至php目錄
[root@localhost php-5.4.26]# ./configure --prefix=/usr/local/php --enable-fpm --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr/ --enable-xml --enable-sockets --with-mcrypt --with-bz2 --with-config-file-path=/etc/php/php.ini --with-config-file-scan-dir=/etc/php.d/
[root@bogon php-5.6.8]# make && make install
注:可能需要配置epel源安裝libmcrypt、libmcrypt-devel包
圍php提供運作腳本
[root@localhost php-5.4.26]# cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm
[root@localhost php-5.4.26]# chmod +x /etc/rc.d/init.d/php-fpm#:給腳本執行權
[root@localhost php-5.4.26]# chkconfig --add php-fpm#添加到chkconfig清單,[root@localhost php-5.4.26]# chkconfig php-fpm on#設定開機自啟動
為PHP提供配置檔案
[root@localhost php-5.4.26]# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
編輯配置檔案,修改一下幾項
Pm.max_children = 50#:設定最多子程序數量為50
Pm_start_servers = 5#:設定預先啟動的程序數為5個
Pm.min_spare_servers = 2#:設定最少空閑子程序數為2
Pm.max_spare_servers = 8#:設定最多空閑子程序數為8
Pid = /usr/local/php/var/run/php-fpm.pid#:設定程序檔案位置
啟動服務測試:
[root@localhost php-5.4.26]# service php-fpm restart
Mairadb安裝使用通用二進制安裝即可,在此不多做介紹,可參考http://7703592.blog.51cto.com/7693592/1649948
#修改配置檔案,實作LNP結合
修改Nginx主配置檔案/etc/nginx/nginx.conf,啟用如下配置,并修改其代理檔案的位置
編輯/usr/local/nginx/html/index.php,使其内容如下
重新開機服務并測試
[root@localhost html]# service php-fpm restart
[root@localhost html]# nginx -s reload