nginx反向代理配置詳解
阿新 • • 發佈:2017-11-02
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反向代理配置詳解