1. 程式人生 > >nginx反向代理配置詳解

nginx反向代理配置詳解

nginx反向代理配置詳解

反向代理配置


修改部署目錄下conf子目錄的nginx.conf文件(如/opt/nginx/conf/nginx.conf)內容,可調整相關配置。

將默認配置裏面帶#號註釋內容去掉

grep -v "#" /opt/nginx/conf/nginx.conf > /opt/nginx/conf/nginx.confbak

將原先的配置修改名字備份一下,後面的沒有註釋內容的nginx.confbak修改名字為nginx.conf


反向代理配置示例:

#定義Nginx運行的用戶和用戶組
user nginx nginx;

#nginx進程數,建議設置為等於CPU總核心數
worker_processes  1;

#全局錯誤日誌定義類型,[ debug | info | notice | warn | error | crit ]
error_log logs/error.log info;

#進程文件
pid run/nginx/nginx.pid;

#一個nginx進程打開的最多文件描述符數目,理論值應該是最多打開文件數(系統的值ulimit -n)與nginx進程數相除,但是nginx分配請求並不均勻,所以建議與ulimit -n的值保持一致。
worker_rlimit_nofile 65535;


#工作模式與連接數上限
events {
    #use epoll;
    #參考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; 
epoll模型是Linux 2.6以上版本內核中的高性能網絡I/O模型,如果跑在FreeBSD上面,就
用kqueue模型。window下不指定。
補充說明:
與apache相類,nginx針對不同的操作系統,有不同的事件模型。
A)標準事件模型
Select、poll屬於標準事件模型,如果當前系統不存在更有效的方法,nginx會選擇select或poll
B)高效事件模型
Kqueue:使用於FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 和 MacOS X.使用雙處理器的MacOS X系統使用kqueue可能會造成內核崩潰。
Epoll:使用於Linux內核2.6版本及以後的系統。
/dev/poll:使用於Solaris 7 11/99+,HP/UX 11.22+ (eventport),IRIX 6.5.15+ 和 Tru64 UNIX 5.1A+。
Eventport:使用於Solaris 10。 為了防止出現內核崩潰的問題, 有必要安裝安全補丁。
      
      
      #單個進程最大連接數(最大連接數=連接數*進程數)
    worker_connections  4000;
}

#設定http服務器
http {
    include       mime.types;#文件擴展名與文件類型映射表
    default_type  application/octet-stream;#默認文件類型
    #charset utf-8; #默認編碼
    server_names_hash_bucket_size 128; #服務器名字的hash表大小
    client_header_buffer_size 32k; #上傳文件大小限制

    
    
    #access默認原先日誌格式
    #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;
    
    autoindex off;#開啟目錄列表訪問設置為on,合適下載服務器,默認關閉。
    
    #日誌格式定義為如下
    log_format  main  ‘$remote_addr - $remote_user [$time_local] "$request" ‘
                      ‘$status $body_bytes_sent "$http_referer" ‘
                      ‘"$http_user_agent" "$http_x_forwarded_for"‘
                       ‘$upstream_addr $upstream_response_time $request_time ‘;
    log_format log404 ‘$status [$time_local] $remote_addr $host$request_uri $sent_http_location‘;
    
    日誌格式設置說明:
     $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地址和原來客戶端的請求的服務器地址。
    
    
    access_log  logs/nginx/access.log main;
    access_log  logs/host.access.404.log  log404;
     用了log_format指令設置了日誌格式之後,需要用access_log指令指定日誌文件的存放路徑;
    
    sendfile  on; #開啟高效文件傳輸模式,sendfile指令指定nginx是否調用sendfile函數
    來輸出文件,對於普通應用設為 on,如果用來進行下載等應用磁盤IO重負載應用,可設置
    為off,以平衡磁盤與網絡I/O處理速度,降低系統的負載。註意:如果圖片顯示不正常把這
    個改 成off。
    #tcp_nopush on; #防止網絡阻塞
    #tcp_nodelay on; #防止網絡阻塞
    
    keepalive_timeout  65;#長連接超時時間,單位是秒
    
    #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;
        
    #壓縮類型,默認就已經包含textml,所以下面就不用再寫了,寫上去也不會有問題,但是會有一個warn。
    gzip_vary on; 
    #limit_zone crawler $binary_remote_addr 10m; #開啟限制IP連接數的時候需要使用
    
    
   #虛擬主機的配置 
    server {
        listen       80;#偵聽的80端口
        
        #域名可以有多個,用空格隔開
        server_name  10.40.50.52;
        
        #client_header_buffer_size 4k;客戶端請求頭部的緩沖區大小。這個可以根據你的
        系統分頁大小來設置,一般一個請求的頭部大小不會超過1k,不過由於一般系統分
        頁都要大於1k,所以這裏設置為分頁大小。分頁大小可以用命令getconf PAGESIZE取
        得。
        
        large_client_header_buffers 4 128k; 客戶請求頭緩沖大小。nginx默認會
        用client_header_buffer_size這個buffer來讀取header值,如果header過大,它會
        使用large_client_header_buffers來讀取。
        
        client_max_body_size 300m; #允許客戶端請求的最大單文件字節數
        
        client_body_buffer_size 128k; #緩沖區代理緩沖用戶端請求的最大字節數
        
        proxy_connect_timeout 600; #nginx跟後端服務器連接超時時間(代理連接超時)
        
        proxy_read_timeout 600; #連接成功後,後端服務器響應時間(代理接收超時)
        
        proxy_send_timeout 600; #後端服務器數據回傳時間(代理發送超時)
        
        proxy_buffer_size 64k; #設置代理服務器(nginx)保存用戶頭信息的緩沖區大小
        
        proxy_buffers   4 32k; #proxy_buffers緩沖區,網頁平均在32k以下的話,
        這樣設置
        proxy_busy_buffers_size 64k; #高負荷下緩沖大小(proxy_buffers*2)
        
        proxy_temp_file_write_size 64k; #設定緩存文件夾大小,大於這個值,將
        從upstream服務器傳
        
——————————————————————————————————————————————————————————        
#proxy_buffers 4 256k;
#設置用於讀取應答(來自被代理服務器)的緩沖區數目和大小,默認情況也為分頁大小,根據操作系統
#的不同可能是4k或者8k
 
#proxy_busy_buffers_size 256k;
 
#proxy_temp_file_write_size 256k;
#設置在寫入proxy_temp_path時數據的大小,預防一個工作進程在傳遞文件時阻塞太長
        
#proxy_temp_path /data0/proxy_temp_dir;
#proxy_temp_path和proxy_cache_path指定的路徑必須在同一分區

#proxy_cache_path /data0/proxy_cache_dir levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;
#設置內存緩存空間大小為200MB,1天沒有被訪問的內容自動清除,硬盤緩存空間大小為30GB。

#client_body_buffer_size 512k;
#如果把它設置為比較大的數值,例如256k,那麽,無論使用firefox還是IE瀏覽器,來提交任意小
於256k的圖片,都很正常。如果註釋該指令,使用默認的client_body_buffer_size設置,也就是操作
系統頁面大小的兩倍,8k或者16k,問題就出現了。
#無論使用firefox4.0還是IE8.0,提交一個比較大,200k左右的圖片,都返回500 Internal Server
 Error錯誤
 
#proxy_intercept_errors on;
#表示使nginx阻止HTTP應答代碼為400或者更高的應答。
——————————————————————————————————————————————————————————

#設定查看Nginx狀態的地址
        location /nginxstatus{
                stub_status on;
                access_log on;
                auth_basic "nginxstatus";
                auth_basic_user_file htpasswd;
                #htpasswd文件的內容可以用apache提供的htpasswd工具來產生。
        }
        

#hone服務
        location /hone {
           index  index.html index.htm index.jsp;
           proxy_pass      http://11.33.22.56:8080/hone;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header Host $host:$server_port;
        }

#門戶網站
        location /GR133 {
           index  index.html index.htm index.jsp;
           proxy_pass  http://192.168.133.12:8585/GR133;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header Host $host:$server_port;
        }
        location /GR133File {
           index  index.html index.htm index.jsp;
           proxy_pass  http://192.168.133.12:8585/GR133File;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header Host $host:$server_port;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}


在/opt/nginx/目錄下創建htpasswd文件:

利用htpasswd命令添加用戶
htpasswd -bc conf/htpasswd nginx usernginx19

在/opt/nginx/conf目錄下生成一個passwd文件,用戶名nginx,密碼:usernginx19,默認采用MD5加密方式。


本文出自 “運維筆錄 美玲” 博客,請務必保留此出處http://meiling.blog.51cto.com/6220221/1978482

nginx反向代理配置詳解