Nginx安裝配置,簡單構建LNMP環境配置反向代理,實現動靜分離,以及實現負載均衡。

        Nginx是一個輕量級並有着高性能的http和反向代理服務器,它對高併發靜態內容的請求有着高效的處理性能。採用epoll屬於非阻塞過程調用模型,一個工作進程可以響應多個請求。      
        Nginx會按需同時運行多個進程:一個主進程(master)和幾個工作進程(worker),配置了緩存時還會有緩存加載器進程(cache loader)和緩存管理器進程(cache manager)等。所有進程均是僅含有一個線程,並主要通過“共享內存”的機制實現進程間通信。主進程以root用戶身份運行,而worker、cache loader和cache manager均應以非特權用戶身份運行。官網地址:nginx.org

主進程主要完成如下工作:

  • 讀取並驗正配置信息;

  • 創建、綁定及關閉套接字;

  • 啓動、終止及維護worker進程的個數;

  • 無須中止服務而重新配置工作特性;

  • 控制非中斷式程序升級,啓用新的二進制程序並在需要時回滾至老版本;

  • 重新打開日誌文件,實現日誌滾動;

  • 編譯嵌入式perl腳本;

worker進程主要完成的任務包括:

  • 接收、傳入並處理來自客戶端的連接;

  • 提供反向代理及過濾功能;

  • nginx任何能完成的其它任務;

cache loader進程主要完成的任務包括:

  • 檢查緩存存儲中的緩存對象;

  • 使用緩存元數據建立內存數據庫;

cache manager進程的主要任務:

  • 緩存的失效及過期檢驗;

安裝Nginx:

先安裝pcre-devel:yum install pcre-devel -y

tar xf nginx-1.6.0.tar.gz

cd nginx-1.6.0

開始編譯

# ./configure \

  --prefix=/usr/local/nginx \

  --sbin-path=/usr/local/nginx/sbin/nginx \

  --conf-path=/etc/nginx/nginx.conf \

  --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 \

  --user=nginx \

  --group=nginx \

  --with-http_ssl_module \

  --with-http_flv_module \

  --with-http_stub_status_module \

  --with-http_gzip_static_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/fcgi/ \

  --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \

  --http-scgi-temp-path=/var/tmp/nginx/scgi \

  --with-pcre

  • make && make install

編寫服務腳本,放置/etc/init.d目錄,前面文章已經有很多服務腳本的例子,這裏省略。

而後爲此腳本賦予執行權限:

  • chmod +x /etc/rc.d/init.d/nginx

添加至服務管理列表,並讓其開機自動啓動:

  • chkconfig --add nginx

  • chkconfig nginx on

而後就可以啓動服務並測試了:

  • service nginx start

來看看nginx的主配置文件/etc/nginx/nginx.conf

全局配置的常用指令

worker_processes 1  定義worker進程的個數,一般爲cpu的兩倍。

events{

use epoll

worker_connections number;        一個Worker進程的最大連接數

}

#clients= worker_connections * work_processes

worker_cpu_affinity 0001 0010 0100 1000;  綁定CPU核心,避免了上下文切換。

worker_rlimit_nofile number;    51200  調整每個用戶所能打開的文件數量。

/etc/security/limits.conf  也可以通過修改配置文件調整。

worker_priority  -5;  定義進程優先級

 

http {

include mime.types; #文件擴展名與文件類型映射表
default_type application/octet-stream; #默認文件類型
#charset utf-8; #默認編碼
server_names_hash_bucket_size 128; #服務器名字的hash表大小
sendfile on; #開啓高效文件傳輸模式,sendfile指令指定nginx是否調用sendfile函數來輸出文件,對於普通應用設爲 on,如果用來進行下載等應用磁盤IO重負載應用,可設置爲off,以平衡磁盤與網絡I/O處理速度,降低系統的負載。注意:如果圖片顯示不正常把這個改成off。
autoindex on; #開啓目錄列表訪問,合適下載服務器,默認關閉。
tcp_nopush on; #防止網絡阻塞
tcp_nodelay on; #防止網絡阻塞

keepalive_timeout  5;  持久連接超時時間

       server{      

               listen       80;
               index index.html index.htm index.php; 定義主頁
               root  /web;   定義主目錄

               Server_name  定義虛擬主機名 

=    精確匹配

location  = /images/ {

}

~    模式匹配,區分模式中的字符大小寫

~*   模式匹配,不區分大小寫

location ~* \.jpg$ {

}    任何以.jpg結尾的都匹配。

^~   不做模式匹配

autoindex  on   開啓目錄索引

autoindex_exact_size on  顯示精確大小

autoindex_localtime on  顯示文件的訪問時間

Error_page 404  /404.html       自定義錯誤頁面文件

Error_page 500 502 504  /50x.html

Log_format    日誌格式

Access_log     訪問日誌

              }

       }

}

配置一個基於名稱的虛擬主機。

server {

        listen  80;

        server_name www.tuchao.com;

           root '/web/tuchao';

           index index.html;

}

配置對/web/tuchao/secret/路徑做訪問控制。

server {

        listen  80;

        server_name www.tuchao.com;

           root '/web/tuchao';

           index index.html;

        location /secret {

           root '/web/tuchao';

           auth_basic   "tuchao's secret";

           auth_basic_user_file  '/etc/nginx/.htpasswd';

}

}

  • htpasswd -c -s /etc/nginx/.htpasswd tuchao 生成用戶文件

  • service nginx reload

訪問下試試:

wKioL1PCWnuylOiwAAINTka0Gac937.jpg

輸入正確的用戶名密碼後,就可以看到內容了。

wKioL1PCWvvDOuT5AAEQcAQBA4g104.jpg

配置路徑別名(alias)

wKioL1PCXbHDUZpvAADZiBu73Ro581.jpg

添加自定義響應首部(add_header 模塊)

wKioL1PCYuLh-FMlAAFTOZmljsU313.jpg

用google瀏覽器訪問,按F12打開開發人員工具,查看下。

wKiom1PCY1CT3YxVAAHoQGaw110736.jpg

Rewrite URL重寫,修改原本請求的位置

控制標誌:

Last:當我們把URL重寫完成後,它會重啓檢查模塊,從頭再檢查一遍

Break:重寫完成後,停止當前的進程,繼續檢查下一個,以避免循環重寫。

Redirect:臨時重定向,顯示重定向。重定向完成,從頭再檢查。

Permanent:返回永久重定向。

example:www.tuchao.com/bbs/index.php ---->  www.tuchao.com/www/html/index.html

我們現在訪問下:http://www.tuchao.com/bbs/index.html,在服務器上,是沒有bbs這個目錄的,訪問當然是not found。

wKioL1PCa2HBbnS2AADyRkamfTA328.jpg

現在我們去配置URL重寫

wKioL1PCbJbjFD7iAAFxiimj6pQ852.jpg

然後reload服務,再試試看。

wKioL1PCbiLTXbYZAAGXmjNAdlg287.jpg



啓用status功能:

wKioL1PCj3zy5XEwAAGWlCw0mUI690.jpg

訪問www.tuchao.com/status

wKiom1PCj_TzCG6AAAE7c7L_RWY577.jpg

構建LNMP環境,先安裝MySQL,然後把php編譯成fpm.

安裝MySQL過程略。。

編譯PHP之前,先安裝依賴包。

bzip2-1.0.5-7.el6_0.i686.rpm

bzip2-devel-1.0.5-7.el6_0.i686.rpm

libmcrypt-2.5.8-4.el5.centos.i386.rpm

libmcrypt-devel-2.5.8-4.el5.centos.i386.rpm

mhash-0.9.9-1.el5.centos.i386.rpm

mhash-devel-0.9.9-1.el5.centos.i386.rpm

mcrypt-2.6.8-1.el5.i386.rpm

libxml2-devel

libcurl-devel

libcurl

開始編譯:

./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-openssl --enable-fpm --enable-sockets --enable-sysvshm  --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib-dir --with-libxml-dir=/usr --enable-xml  --with-mhash --with-mcrypt  --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2 --with-curl

  • make && make install 

爲php提供配置文件:

  • cp php.ini-production /etc/php.ini


爲php-fpm提供Sysv init腳本,並將其添加至服務列表:

  • cp sapi/fpm/init.d.php-fpm  /etc/rc.d/init.d/php-fpm

  • chmod +x /etc/rc.d/init.d/php-fpm

  • chkconfig --add php-fpm

  • chkconfig php-fpm on


爲php-fpm提供配置文件:

cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf 


編輯php-fpm的配置文件:

vim /usr/local/php/etc/php-fpm.conf

配置fpm的相關選項爲你所需要的值,並啓用pid文件(如下最後一行):

pm.max_children = 150

pm.start_servers = 8

pm.min_spare_servers = 5

pm.max_spare_servers = 10

pid = /usr/local/php/var/run/php-fpm.pid 


接下來可以啓動php-fpm了:

service php-fpm start

wKiom1PCmfaAGBNsAAIyxVYeTYY214.jpg

整合nginx和php5


1、編輯/etc/nginx/nginx.conf,啓用如下選項:

location ~ \.php$ {

            root           html;

            fastcgi_pass   127.0.0.1:9000;

            fastcgi_index  index.php;

            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;

            include        fastcgi_params;

        }


2、編輯/etc/nginx/fastcgi_params,將其內容更改爲如下內容:

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;

fastcgi_param  SERVER_SOFTWARE    nginx;

fastcgi_param  QUERY_STRING       $query_string;

fastcgi_param  REQUEST_METHOD     $request_method;

fastcgi_param  CONTENT_TYPE       $content_type;

fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;

fastcgi_param  REQUEST_URI        $request_uri;

fastcgi_param  DOCUMENT_URI       $document_uri;

fastcgi_param  DOCUMENT_ROOT      $document_root;

fastcgi_param  SERVER_PROTOCOL    $server_protocol;

fastcgi_param  REMOTE_ADDR        $remote_addr;

fastcgi_param  REMOTE_PORT        $remote_port;

fastcgi_param  SERVER_ADDR        $server_addr;

fastcgi_param  SERVER_PORT        $server_port;

fastcgi_param  SERVER_NAME        $server_name;


並在所支持的主頁面格式中添加php格式的主頁,類似如下:

location / {

            root   html;

            index  index.php index.html index.htm;

        }

        

而後重新載入nginx的配置文件:

  • service nginx reload


通過瀏覽器訪問此測試頁面。php頁面執行成功。

wKioL1PCnlmgSGkNAAMB1scuXdA469.jpg

配置反向代理服務器(proxy)

wKiom1PCq9XD15nhAAFTDVVGhW0005.jpg

成功轉發至192.168.18.100

wKioL1PCq-mz_jHKAAC55JOjItI397.jpg

查看192.168.18.100主機的日誌

wKiom1PCrPWBxugOAAG--isBF00596.jpg由此發現,記錄的是我們nginx服務器的地址,沒有記錄到請求端的地址,這樣一來記錄日誌將變得沒有意義,接下來我們來解決這個問題。

編輯nginx.conf文件

wKiom1PCsxnD6CRgAAD39QVsjv4993.jpg

編輯192.168.18.100主機的httpd.conf文件

wKioL1PCsxuQeVg9AAIaX4UwZFw381.jpg


刷新幾次頁面,再看下日誌,現在是記錄請求端的IP了。

wKioL1PCs2Lg4Z_cAAUP2YvIxT4105.jpg

使用反向代理實現動靜分離

wKioL1PCuCvgzfMGAAEGMRCRZ5c132.jpg

我們訪問192.168.18.200/11.jpg,由於這個請求是靜態的,會轉到192.168.18.100。

wKiom1PCuLzxaGRUAAJI3U66E-E808.jpg 

當我們請求192.168.18.200/index.php時,這個請求會轉發至127.0.0.1:9000,當然這也可以是一個遠端主機的地址,這就實現了,反向代理動靜分離。

wKioL1PCuP-wayTBAAJ9-v6-IfI710.jpg

調用upstream模塊,配置負載均衡。

wKioL1PDlsLBrx3IAAEwSfER8-E616.jpg

然後我們仍然訪問,nginx服務器地址192.168.18.200,請求就會輪詢的轉至不同的服務器上去了。

wKioL1PDmC2RNNZQAADk6Y-SiAc683.jpg

wKioL1PDmDuyJ3imAADgaUZ1N6A551.jpg

本來做負載均衡兩臺服務器應該是要一樣的內容,我們這裏實驗,爲了更好驗證效果所以設置了不同的內容。


有問題歡迎與我交流QQ1183710107







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