漫漫運維路——Nginx基礎


Nginx是當今最流行的WEB服務器一,其特性主要有以下幾點:

1.模塊化設計、較好的擴展性

Nginx雖然支持模塊化,但尚不能向HTTPD那樣支持動態模塊加載

2.高可靠

Nginx工作時,由主控進程master直接生成多個worker進程,主控進程負責解析配置文件,並啓動子進程,子進程直接負責處理客戶端連接請求。

3.低內存消耗

Nginx採用了分階段資源分配技術,使得其cpu和內存佔用率極低,官方宣稱10000keepalivenginx連接只需要2.5M內存。

4.支持熱部署

在不停機的情況下可更新配置文件、實現日誌滾動甚至更新程序版本。

5.支持事件驅動機制、AIOmmap

Nginx能很好地支持事件驅動機制、異步IO機制和內存映射機制

Nginx的重要功能:

1.成爲靜態資源的WEB服務器

Nginx也可以向HTTPD一樣成爲靜態頁面服務器,但需要安裝http模塊

2.支持httpsmtppop3協議的反向代理

可設置Nginx把來自基於httpsmtppop3協議的請求修改後發送給其他服務器。

3.支持緩存和負載均衡機制

支持緩存加速且可把來自客戶端的請求發送給後端的多臺服務器,以實現負載均衡的機制。

4.支持FCGIUWCGI模塊

可以基於FCGI模式把動態內容發送給後端的php服務器,或者基於UWCGI模式把python編寫的WEB應用程序發給後端的python解釋服務器。

5.支持SSL

可以基於SSL提供HTTPS服務

接下來就將對Nginx的配置以實驗的方式進行演示

場景一:Nginx扮演靜態頁面服務器的角色工作

1.配置各種虛擬主機

1) 編輯配置文件/etc/nginx/nginx.confhttp{}部分內添加如下內容

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



wKiom1VjPvezl_RMAADYI0NVJo4326.jpg

 

測試


wKioL1VjQJuhiO53AAGBfrcoAVk656.jpg

 

2.自定義定向錯誤頁面和訪問控制

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

修改配置文件


wKiom1VjPyCy7631AADM7vOSAbs645.jpg

 

#在根目錄下新建此文件,並添加內容

[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

#測試


wKioL1VjQNPDYZW8AAD32zylPRs327.jpg

 

2)訪問控制

#基於客戶端的訪問控制

設置拒絕物理機(172.16.250.121)訪問

wKioL1VjQOiAZ9QmAABHd-mu8fc605.jpg

 

用物理機測試


wKiom1VjP3bBluVUAAEi-ja3xK8559.jpg 


#基於用戶的訪問控制

修改配置文件


wKioL1VjQSLi7z1fAAEkig21or0530.jpg

 

使用htpasswd命令向文件中增加用戶信息


wKiom1VjP5-B5TGfAAEqqIH2eXo891.jpg

 

測試


wKioL1VjQUPDtDavAAFasrGfahY621.jpg

 


wKiom1VjP8qCiFTOAACc-tNkMBI947.jpg

 

 

(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


wKioL1VjQaLBFxv_AAFLE6sACkc315.jpg

 

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

在此以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源安裝libmcryptlibmcrypt-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



wKiom1VjQHfArGNQAACHWacOz5c413.jpg

 

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

#修改配置文件,實現LNP結合

修改Nginx主配置文件/etc/nginx/nginx.conf,啓用如下配置,並修改其代理文件的位置


wKioL1VjQhzi8Jr8AAFQ1fdJ5v4254.jpg


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


wKiom1VjQKiT_JgaAABQ5Kr-tX0721.jpg


重啓服務並測試

[root@localhost html]# service php-fpm restart
[root@localhost html]# nginx -s reload


wKioL1VjQkzjj-F8AAIjV9rZ8UU880.jpg

 

 

 

 

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章