Nginx配置

編譯安裝nginxjavascript

#安裝前須要先準備好編譯環境,和nginx須要的組件
[root@nginx ~]# yum install gcc patch libffi-devel python-devel  zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel openssl openssl-devel -y

#下載須要安裝的版本號
https://nginx.org/en/download.html

#解壓源碼包
[root@nginx ~]# tar -zxvf nginx-xxx.tar.gz

#進入解壓目錄,簡單配置並安裝
[root@nginx ~]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module
[root@nginx ~]# make && make install

#啓動nginx
[root@nginx ~]# /usr/local/nginx/sbin/nginx

#重載配置
[root@nginx ~]# /usr/local/nginx/sbin/nginx -s reload

#中止nginx
[root@nginx ~]# /usr/local/nginx/sbin/nginx -s stop

#檢查配置文件
[root@nginx ~]# /usr/local/nginx/sbin/nginx -t

yum安裝nginxphp

#配置nginx yum源,系統須要要換成對應的系統
[root@test ~]# vi /etc/yum.repos.d/nginx.repo 
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

#安裝
[root@test ~]# yum install nginx

nginx目錄結構css

conf 存放nginx全部配置文件的目錄,主要nginx.conf
html 存放nginx默認站點的目錄,如index.html、error.html等
logs 存放nginx默認日誌的目錄,如error.log access.log
sbin 存放nginx主程序的目錄,sbin/nginx

  總體配置文件html

#定義Nginx運行的用戶
user nobody;   

#nginx進程數,一般爲物理cpu核心數-1。
worker_processes 8;  
 
#全局錯誤日誌定義類型,[ debug | info | notice | warn | error | crit ]
error_log /usr/local/nginx/logs/error.log info;

#進程pid文件
pid /usr/local/nginx/logs/nginx.pid;

#指定進程能夠打開的最大描述符個數,一般爲ulimit -n的值
worker_rlimit_nofile 65535;


events
{
	#默認使用epoll模型
    use epoll;

    #單個進程最大鏈接數(最大鏈接數=鏈接數*進程數)
    worker_connections 65535;

    #keepalive超時時間。
    keepalive_timeout 60;

    #客戶端請求頭部的緩衝區大小。一般爲getconf PAGESIZE取得的結果
    client_header_buffer_size 4k;

    #這個將爲打開文件指定緩存,默認是沒有啓用的,max指定緩存數量,建議和打開文件數一致,inactive是指通過多長時間文件沒被請求後刪除緩存。
    open_file_cache max=65535 inactive=60s;

    #這個是指多長時間檢查一次緩存的有效信息,默認60s
    open_file_cache_valid 60s;

    #指明緩存inactive時間沒有用過多少次就刪掉,默認1次
    open_file_cache_min_uses 1;
    
    #這個指令指定是否在搜索一個文件是記錄cache錯誤,默認off
    open_file_cache_errors on;
}
 
http
{
    #包含這個文件,文件擴展名與文件類型映射表
    include mime.types;

    #默認文件類型
    default_type application/octet-stream;

    #默認編碼
    charset utf-8;

    #服務器名字的hash表大小
    server_names_hash_bucket_size 128;

    #客戶端請求頭部的緩衝區大小。
    client_header_buffer_size 32k;

    #客戶端請求頭緩衝大小。
    large_client_header_buffers 4 64k;

    #限制經過nginx上傳文件的大小
    client_max_body_size 8m;

    #開啓高效文件傳輸模式,同時開啓下面選項
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
	
    #開啓目錄列表訪問,合適下載服務器,默認off。
    autoindex off;

    #長鏈接超時時間,單位是秒
    keepalive_timeout 120;

    #FastCGI相關參數
    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
    fastcgi_buffer_size 64k;
    fastcgi_buffers 4 64k;
    fastcgi_busy_buffers_size 128k;
    fastcgi_temp_file_write_size 128k;

    #gzip模塊設置
    gzip on; #開啓gzip壓縮輸出
    gzip_min_length 1k;    #最小壓縮文件大小
    gzip_buffers 4 16k;    #壓縮緩衝區
    gzip_http_version 1.0;    #壓縮版本(默認1.1,前端若是是squid2.5請使用1.0)
    gzip_comp_level 2;    #壓縮等級
    gzip_types text/plain application/x-javascript text/css application/xml;   #壓縮哪一種文件
    gzip_vary on;

    #開啓限制IP鏈接數的時候須要使用
    #limit_zone crawler $binary_remote_addr 10m;

    #負載均衡配置
    upstream 負載組名1 {
        #輪詢機制,weight是權重,值越高負載概率越大
        server 192.168.1.1:80 weight=3;
        server 192.168.1.2:80 weight=2;
        server 192.168.1.3:80 weight=3 down;  #關閉狀態
		server 192.168.1.4:80 weight=3;
		server 192.168.1.5:80 weight=3 backup;#當其餘服務器都壞掉才使用這個
		}
	upstream 負載組名2 {
        #源地址hash機制,按照請求ip的hash結果分配,每一個訪客能夠固定訪問一個後端服務器
		ip_hash;
        server 192.168.1.1:80;
        server 192.168.1.2:80;
        }
	upstream 負載組名3 {
        #響應時間機制,按後端服務器的響應時間來分配請求,響應時間短的優先分配。
        server 192.168.1.1:80;
        server 192.168.1.2:80;
        fair;
        }
    upstream 負載組名4 {
		#訪問url hash機制,按照目標url的hash結果分配
         server squid1:3128;
         server squid2:3128;
         hash $request_uri;
         hash_method crc32;
        }
     
    server
    {
        #監聽端口
        listen 80;

        #域名能夠有多個,用空格隔開
        server_name www.a.cn b.cn;
		
		#網站默認首頁
        index index.html index.htm index.php;
		
		#網站頁面存放路徑
        root html;
         
        #圖片緩存時間設置
		
        #日誌格式設定
        #$remote_addr與$http_x_forwarded_for用以記錄客戶端的ip地址;
        #$remote_user:用來記錄客戶端用戶名稱;
        #$time_local: 用來記錄訪問時間與時區;
        #$request: 用來記錄請求的url與http協議;
        #$status: 用來記錄請求狀態;成功是200,
        #$body_bytes_sent :記錄發送給客戶端文件主體內容大小;
        #$http_referer:用來記錄從那個頁面連接訪問過來的;
        #$http_user_agent:記錄客戶瀏覽器的相關信息;
        #一般web服務器放在反向代理的後面,這樣就不能獲取到客戶的IP地址了,經過$remote_add拿到的IP地址是反向代理服務器的iP地址。反向代理服務器在轉發請求的http頭信息中,能夠增長x_forwarded_for信息,用以記錄原有客戶端的IP地址和原來客戶端的請求的服務器地址。
        log_format access '$remote_addr - $remote_user [$time_local] "$request" '
        '$status $body_bytes_sent "$http_referer" '
        '"$http_user_agent" $http_x_forwarded_for';
         
        #定義本虛擬主機的訪問日誌
        access_log  /usr/local/nginx/logs/host.access.log  main;
        access_log  /usr/local/nginx/logs/host.access.404.log  log404;
         
        #對 "/" 啓用反向代理
        location / {
			#代理至http段的負載
            proxy_pass http://負載組名;
            proxy_redirect off;
			
            proxy_set_header X-Real-IP $remote_addr;
             
            #後端的Web服務器能夠經過X-Forwarded-For獲取用戶真實IP
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
             
            #如下是一些反向代理的配置,可選。
            proxy_set_header Host $host;

            #容許客戶端請求的最大單文件字節數
            client_max_body_size 10m;

            #緩衝區代理緩衝用戶端請求的最大字節數,
            client_body_buffer_size 128k;

            #表示使nginx阻止HTTP應答代碼爲400或者更高的應答。
            proxy_intercept_errors on;

            #nginx跟後端服務器鏈接超時時間(代理鏈接超時)
            proxy_connect_timeout 90;

            #後端服務器數據回傳時間_就是在規定時間以內後端服務器必須傳完全部的數據
            proxy_send_timeout 90;

			#後端服務器處理請求的時間
            proxy_read_timeout 90;

            #設置代理服務器(nginx)保存用戶頭信息的緩衝區大小
            proxy_buffer_size 4k;

            #設置用於讀取應答(來自被代理服務器)的緩衝區數目和大小
            proxy_buffers 4 32k;

            #高負荷下緩衝大小(proxy_buffers*2)
            proxy_busy_buffers_size 64k;
        }
                
        #設定查看Nginx狀態的地址
        location /NginxStatus {
            stub_status on;
            access_log on;
            auth_basic "NginxStatus";
            auth_basic_user_file confpasswd;
            #htpasswd文件的內容能夠用apache提供的htpasswd工具來產生。
        }
         
        #本地動靜分離反向代理配置
        #全部jsp的頁面均交由tomcat或resin處理
        location ~ .(jsp|jspx|do)?$ {
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://127.0.0.1:8080;
        }
         
        #全部靜態文件由nginx直接讀取不通過tomcat或resin
        location ~ .*.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$
        {
            expires 15d; 
        }
         
        location ~ .*.(js|css)?$
        {
            expires 1h;
        }
    }
}

  

  

 

主配置段指令前端

正常運行的必備配置
1.user USERNAME [GROUPNAME];指定運行worker進程的用戶和組,組省略表明跟用戶名同樣的組
2.pid /PATH/TO/PID_FILE;指定nginx守護進程的pid文件
3.worker_rlimit_nofile #;指定全部worker進程所能打開的最大文件數

性能優化的相關配置
1.worker_processes #; 指定worker進程的個數,一般爲cpu物理核心-1個
2.worker_cpu_affinity CPU掩碼 ;進程與cpu綁定,可以提高cpu緩存命中率
3.timer_resolution #; 計時器解析度,下降會提高性能
4.worker_priority #;指定worker進程的nice值
事件的相關配置
1.accept_mutex on|off;主進程調度用戶請求至各工做進程使用的負載均衡鎖,on表示能讓多個工做進程輪流、有序的響應新請求
2.lock_file /PATH/TO/FILE;上面那個鎖的路徑
3.use [epoll|rtsig|select|poll];知名使用的事件模型,建議讓nginx自行選擇
4.worker_connections #;設定單個工做進程所可以處理的併發鏈接數量
調試、定位問題
1.daemon [on|off];是否以守護進程方式來運行nginx,調試時設置爲off,會出現信息
2.master_process [on|off];是否以master/worker模型來運行nginx,調試時能夠設置爲off
3.error_log 記錄位置 級別;記錄日誌,若要使用debug級別,須要在編譯nginx時使用了--with-debug選項
java

http配置段node

[root@test nginx]# grep -v "#" conf/nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  www.a.com;
        location / {
            root   /www;
            index  index.html index.htm;
        }
	location /status {
		stub_status on;
	}
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

1.listen:監聽地址或端口python

2.sever_name:設置網站名,同時能夠設置網站別名,用空格隔開nginx

3.root:定義網頁目錄,能夠用於server,location字段,右側斜線"/"必須同時有或沒有
web

location /aaa/{
       root   /nginx/www/   #訪問aaa至關於/nginx/www/aaa
}

 4.alias:用於location配置段,定義路徑別名,右側斜線"/"必須同時有或沒有

location /bbb/{
       alisa /nginx/www/    #訪問aaa至關於/nginx/www
}

 5.server_name匹配方法:
  (1)先作精確匹配檢查
  (2)左側通配符匹配檢查,*.a.com
  (3)右側通配符匹配檢查,www.*
  (4)正則表達式匹配檢查,
  (5)默認虛擬主機

6.location [ = | ~ | ~* | ^~ ] URI { ... }:根據用戶請求的URI作處理
  =:精確匹配檢查,最高優先級
  ^~:URI的前半部分匹配,不支持正則表達式
  ~:正則表達式模式匹配檢查,區分字符大小寫
  ~*:正則表達式模式匹配檢查,不區分字符大小寫
  無符號:最低優先級

7.index:默認主頁面
  index index.php index.html;

8.根據http響應的狀態碼來指定錯誤頁面:error_page # # [=#] /PATH/TO/FILE:
  error_page 400 404 =100 100_error.html; 當http迴應400或404狀態碼時,將他重置爲100,並返回當前目錄下100_error.html頁面

9.基於ip的訪問控制
  allow IP/NETWORK; 
  deny IP/NETWORK;   

10.基於帳號的認證
  auth_basic "";    輸入密碼的提示
  auth_basic_user_file "/PATH/TO/PASSWORD_FILE" 密碼文件可使用htpasswd建立

11.https服務

#server {
        listen       443 ssl;
        server_name  localhost;
        ssl_certificate      cert.pem;   #指定證書
        ssl_certificate_key  cert.key;  #指定證書私鑰
        location / {
            root   html;
            index  index.html index.htm;
        }
    }

12.狀態信息

 location /status {
                stub_status on;
                allow 172.17.148.112;
                deny all;
        }

13.狀態信息解釋

Active connections: 1                         #當前全部處於打開狀態的鏈接數
server accepts handled requests         
 13 13 25 
#已經接受過的鏈接數
#已經處理過的鏈接數
#已經處理過的請求數,keepalive模式下,請求數量會多於鏈接數量
Reading: 0 Writing: 1 Waiting: 0 
#正處於接收請求狀態的鏈接數
#請求已經接收完成,正處於處理請求或發送響應的過程當中的鏈接數
#keepalive模式處於活動狀態的鏈接數

14.URL重寫rewrite 正則  替換內容  標誌

  rewrite ^/images/(.*\.jpg)$ /imgs/$1 break;

  例:www.a.com/images/a/b.jpg就會換成www.a.com/imgs/a/b.jpg
  標誌:
    last:會在location內一直循環匹配,直到都匹配完成才結束
    break:替換一次就不會再替換了
    redirect:以302響應碼臨時重定向返回新的URL
    permanent:以301響應碼永久重定向返回新的URL
15.if (表達式) {}   條件判斷能夠應用在srever、location
  (1)變量名:變量名爲空或者爲0,則爲false;其餘的都爲true
  (2)比較表達式:=,>,<,!=相似的比較字符串進行比較
  (3)正則表達式:~區分大小寫,~*不區分大小寫
  (4)是否爲文件:-f,!-f
  (5)是否爲目錄:-d,!-d
  (6)文件是否存在:-e,!-e
  (7)文件是否有執行權限:-x,!-x
  例:if ($http_usr_agent ~* MSIE){
      rewrite ^(.*)$ /msie/$1 break;  假如瀏覽器類型爲微軟,就定向到msie目錄下
      }  

16.定製訪問日誌,log_format 日誌名 日誌格式

 log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                     '$status $body_bytes_sent "$http_referer" '
                     '"$http_user_agent" "$http_x_forwarded_for"';
 access_log  logs/access.log  main;
##log_format:用來定義記錄日誌的格式,取不一樣名字便可
##main:定義後面日誌的名字
##access_log:用來指定日誌文件的路徑及使用哪一種格式進行記錄 
##$remote_addr:記錄訪問網站的客戶端地址
##$remote_user:遠程客戶端用戶名稱
##$time_local:用戶訪問時間與時區
##$request:用戶的http請求起始行信息
##$status:記錄請求返回的狀態碼
##$body_bytes_sent:服務器發送給客戶端的響應主體字節數
##$http_referer:記錄這次請求時由哪一個連接跳轉而來
##$http_user_agent:用戶的瀏覽器類型
##$http_x_forwarded_for:當前端是代理服務器時,記錄由哪一個代理轉發而來    

 

16.1錯誤日誌

error_log   /var/log/nginx/error.log   warn;
##能夠配置在main,http,server,location段。
##錯誤日誌級別有debug、info、notice、warn、error、crit、alert、emerg
##錯誤日誌默認級別爲error,配置較低等級會致使大量磁盤I/O    

17.實現反向代理

location / {
      proxy_pass http://172.17.148.255/;     #將訪問的全部數據都代理給後面的
      proxy_set_header ahost $proxy_host;   #傳送代理主機的ip,爲了記錄日誌
      proxy_set_header bhost $http_host;     #從哪一個代理過來的ip+端口
      proxy_set_header Host  $host;       #當有多個虛擬主機時,代理服務器能夠識別訪問的是哪一個虛擬主機
      proxy_set_header dhost $proxy_port;    #從哪一個代理過來的端口
      proxy_set_header X-Forwarded-For $remote_addr;  #真實請求的主機ip
    }
location /nginx.txt {
        proxy_pass http://172.17.148.255/nginx/nginx.txt;   #將匹配到的內容定向後面
        }
location  ~* \.(jpgg|pngg)$ {     #假如這裏是根據正則匹配的↓
        proxy_pass http://172.17.148.255;  #下面這裏不能加任何路徑,由於會在路徑後面補全前面匹配到的內容
        }

 #######定義完傳送的日誌名稱後,需在在後端服務器上修改對應的日誌格式,之後端httpd爲例
LogFormat "%{ahost}i %{bhost}i %{chost}i %{dhost}i %{ehost}i" combined

18.定義緩存

http {
proxy_cache_path /cache/nginx levels=1:1:1 keys_zone=mycache:10m;
}
#定義緩存必須在http段,/cache/nginx/目錄必須爲worker進程的屬主屬組
#levels表明有幾個層級目錄,最多3層,1:1:1表明有三層目錄,1表明目錄名最多一個字符
#keysz_zone表明緩存名稱,後面引用的時候會用,大小爲10M

19.使用緩存

location / {
        proxy_cache mycache;             #定義使用的緩存空間
        proxy_cache_valid 200 1m;      #狀態碼爲200緩存1分鐘
        proxy_cache_valid 301 302 10m;   #狀態碼爲301 302 緩存10分鐘
        proxy_cache_valid any 1m;      #狀態碼爲其餘緩存1分鐘
        proxy_cache_methods GET  HEAD    #設置http請求方法爲get或head時才使用緩存 
    proxy_cache_use_stale error  timeout    #當後方服務器爲何狀態時可使用過時的緩存
       proxy_cache_min_uses 2;           #同一資源使用幾回後才緩存
       proxy_cache_bypass $ cookie_nocache $ arg_nocache $ arg_comment;    #定義不從緩存中獲取響應的條件
       proxy_set_header ehost $remote_addr;  #真實請求的主機ip
       proxy_pass http://172.17.148.255/;    
}  

 20.負載均衡,服務器組

upstream backend {            #定義服務器組,只能在http段定義 
    server 10.1.1.1  weight=2;  #設置權重爲2,默認權重爲1
    server 10.1.1.2:8080;    #能夠加端口
    server 10.1.1.3  fail_timeout=5s max_fails=3;  #最多嘗試3次,超時後每5秒檢查一次
    server 10.1.1.4  backup;   #備份服務器,當其餘節點都不可用時,才用這個
    server 10.1.1.5  down;      #標緻服務器狀態爲不可用
    server 10.1.1.6  weight=1 max_fails=1 fail_timeout=10s;  #默認配置
    server  www.abc.com:8080;  #同時可使用域名加端口的方式  
}
server {
    listen 80;
    server_name   www.aaa.com;
    location / {
        proxy_pass http://backend;       #當訪問www.aaa.com時,發送給上面定義的服務器組
    }
} 

21.session保持

upstream  keepsession{
       ip_hash;    
       server 10.1.1.1;
       server 10.1.1.2;  
}
##ip_hash,根據源ip進行會話保持,後端服務器在負載均衡調度中的狀態不能有weight和backup
##fair,根據後端服務器的響應時間
##least_conn,根據後端服務器節點的鏈接數
##hash $request_rui,根據訪問的URL
##consistent_hash $request_rui,一致性hash

  

  

  

  

 

 網絡相關的配置

1.keepalive_timeout #;  長鏈接超時時長,默認75秒
2.keepalive_request #; 在一個長鏈接上所可以容許請求的最大資源數
3.keepalive_disables [msie6|safari|none]; 爲指定類型瀏覽器禁用長鏈接
4.tcp_nodelay on | off; 是否對長鏈接使用延遲功能
5.client_hearder_timeout #; 讀取http請求報文首部超時時長
6.client_body_timeout #;讀取http請求報文body部分超時時長
7.send_timeout #;發送響應報文的超時時長

 fastcgi相關配置

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;
        } 

 

相關優化

1.隱藏nginx的版本號信息

http {
        server_tokens off;   #隱藏版本號
} 
##能夠放置在http、server、location段中,默認配置爲on

2.進程數和cpu綁定

##假設單顆四核心cpu
http{
worker_processes  4;
worker_cpu_affinity  0001  0010  0100  1000;
}
##配置4個工做進程,把這四個進程分別綁定到cpu的4個核心上
http{
worker_processes  2;
worker_cpu_affinity  0101  1010;
}
##配置2個工做進程,把第一個進程分配到一、3cpu上,把第二個進程分配到二、4cpu上

3.單個進程最大鏈接數

events {
    worker_connections  1024;
}
##最大鏈接數=工做進程個數*單個進程作大鏈接數

4.鏈接超時設置

###均可以在http、server、location中作
keepalive_timeout 60;  #長鏈接超時時間
client_header_timeout 60; #超過多長時間還沒收到客戶端的請求頭部就斷開
client_body_timeout 60; #超過多長時間還沒收到客戶端的請求主體就斷開
send_timeout 60; #客戶端若是超過多長時間沒有接收數據就斷開

5.上傳文件大小的限制

###能夠放置在http、server、location段
client_max_body_size  1m;  #若是客戶端請求主體大小超過1m,就返回413錯誤

6.壓縮功能

#####壓縮文本文件,圖片和視頻不要壓縮
gzip on;   #開啓壓縮功能
gzip_min_length  1k;   #設置低於1k的文件不壓縮,若是壓縮低於1k的文件可能會變大
gzip_comp_level  2;  #設置壓縮比,1壓縮比最小,壓縮速度最快;9壓縮比最大,壓縮速度最慢
gzip_types  text/html text/css text/xml;設置哪些類型的文件被壓縮
gzip_vary on;

7.錯誤頁面優雅顯示

error_page  400 401 402 403 404  =200  /error.html
##當返回狀態碼爲40...時,重置爲200,並返回/error.html頁面
error_page  500 501   http://www.abc.com
##當返回狀態碼爲50..時,返回這個網頁

  

·  

相關文章
相關標籤/搜索