Nginx是當今最流行的WEB服務器一,其特性主要有如下幾點:php
1.模塊化設計、較好的擴展性html
Nginx雖然支持模塊化,但尚不能向HTTPD那樣支持動態模塊加載python
2.高可靠nginx
Nginx工做時,由主控進程master直接生成多個worker進程,主控進程負責解析配置文件,並啓動子進程,子進程直接負責處理客戶端鏈接請求。後端
3.低內存消耗api
Nginx採用了分階段資源分配技術,使得其cpu和內存佔用率極低,官方宣稱10000個keepalive的nginx鏈接只須要2.5M內存。緩存
4.支持熱部署bash
在不停機的狀況下可更新配置文件、實現日誌滾動甚至更新程序版本。服務器
5.支持事件驅動機制、AIO、mmapsession
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