天天看點

漫漫運維路——Nginx基礎

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

漫漫運維路——Nginx基礎

測試

漫漫運維路——Nginx基礎

2.自定義定向錯誤頁面和通路控制

(1) 自定義定向錯誤頁面

# 修改配置檔案

漫漫運維路——Nginx基礎

#在根目錄下建立此檔案,并添加内容

[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      
漫漫運維路——Nginx基礎

(2)通路控制

#基于用戶端的通路控制

設定拒絕實體機(172.16.250.121)通路

漫漫運維路——Nginx基礎

用實體機測試

漫漫運維路——Nginx基礎

#基于使用者的通路控制

修改配置檔案

漫漫運維路——Nginx基礎

使用htpasswd指令向檔案中增加使用者資訊

漫漫運維路——Nginx基礎
漫漫運維路——Nginx基礎
漫漫運維路——Nginx基礎

(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      
漫漫運維路——Nginx基礎

場景二:反向代理動态請求至動态頁面伺服器

在此以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      
漫漫運維路——Nginx基礎

Mairadb安裝使用通用二進制安裝即可,在此不多做介紹,可參考http://7703592.blog.51cto.com/7693592/1649948

#修改配置檔案,實作LNP結合

修改Nginx主配置檔案/etc/nginx/nginx.conf,啟用如下配置,并修改其代理檔案的位置

漫漫運維路——Nginx基礎

編輯/usr/local/nginx/html/index.php,使其内容如下

漫漫運維路——Nginx基礎

重新開機服務并測試

[root@localhost html]# service php-fpm restart
[root@localhost html]# nginx -s reload      
漫漫運維路——Nginx基礎

繼續閱讀