nginx-启动gzip、虚拟主机、请求转发、负载均衡
?
一、啟用gzip
1?????gzip??on; 2?????gzip_min_length?1k; 3?????gzip_buffers?4?16k; 4?????gzip_http_version?1.1; 5?????gzip_comp_level?2; 6?????gzip_types?text/plain?application/x-javascript?text/css?application/xml?application/json; 7?????gzip_vary?on;將上面這段放在nginx.conf文件 http{...}之間即可
?
二、虛擬主機
?1?????server?{2?????????listen???????80;3?????????server_name??www.aaa.com;4?????????access_log?logs/aaa.access.log?combined;5?????????location?/?{6?????????????root???r:/www/aaa.com;7?????????????index??index.html?index.htm;8?????????}???????9?????} 10? 11?????server?{ 12?????????listen???????80; 13?????????server_name??www.bbb.com; 14?????????access_log?logs/bbb.access.log?combined; 15?????????location?/?{ 16?????????????root???r:/www/bbb.com; 17?????????????index??index.html?index.htm; 18?????????}??????? 19?????}這里配置了二個虛擬主機,分別綁定到域名www.aaa.com及www.bbb.com
?
三、請求轉發
如上圖,為了安全起見,通常會把真正的web 應用服務器放在內網,不允許外界直接訪問,這時可利用nginx的反向代理將請求轉到內部服務器
?1?????server?{2?????????listen???????80;3?????????server_name??www.aaa.com;????4?????location?/?{5?????????proxy_pass?http://192.168.1.201:8080?;6?????????proxy_set_header?Host?$host:8080;7?????????proxy_set_header?X-Real-IP?$remote_addr;8?????????proxy_set_header?X-Forwarded-For?$proxy_add_x_forwarded_for;9?????????proxy_set_header?Via?"nginx"; 10?????} 11?????access_log?off;???? 12?????}這樣,訪問 http://www.aaa.com/home/index.aspx 就相當于訪問http://192.168.1.201:8080/home/index.aspx
有些時候,我們希望將共用的靜態資源(比如:jquery,共用css),直接放在nginx下,背后的web app server,只處理動態資源(比如:.aspx/.do/.jsp),可以改進一下:
?1?????server?{2?????????listen???????80;3?????????server_name??www.aaa.com;4?????root?R:/www/aaa.com;5?6?????location?/?{7?????????proxy_pass?http://192.168.1.201:8080?;8?????????proxy_set_header?Host?$host:8080;9?????????proxy_set_header?X-Real-IP?$remote_addr; 10?????????proxy_set_header?X-Forwarded-For?$proxy_add_x_forwarded_for; 11?????????proxy_set_header?Via?"nginx"; 12?????} 13? 14?????location?~?.*\.(js|css)?$?{ 15?????????expires?1h; 16?????} 17? 18?????access_log?off;???? 19?????}這樣,訪問http://www.aaa.com/content/site.css 實際上讀取的是R:/www/aaa.com/content/site.css 這個文件
?
四、負載均衡
如上圖,nginx在前端利用反向代理實現軟件負載均衡,nginx不僅能實現負載均衡,當某一個node失效時,還能自動故障轉移,關鍵配置如下:
?1?????proxy_connect_timeout?5;?2?????3?????upstream?aaa_server_group{????4?????server?172.21.129.181:9091?max_fails=1?fail_timeout=60s;?5?????server?172.21.129.181:9092?max_fails=1?fail_timeout=60s;?6?????server?172.21.129.57:9012?max_fails=1?fail_timeout=60s;7?????ip_hash;8?????}9? 10?????server?{ 11?????????listen???????80; 12?????????server_name??www.aaa.com; 13?????root?R:/www/aaa.com; 14? 15?????location?/?{ 16?????????proxy_next_upstream?http_502?http_504?error?timeout?invalid_header; 17?????????proxy_pass?http://aaa_server_group?;???????????? 18?????????proxy_set_header?X-Forwarded-For?$remote_addr;???????? 19?????} 20? 21?????location?~?.*\.(js|css)?$?{ 22?????????expires?1h; 23?????} 24? 25?????access_log?off;???? 26?????}解釋一下:
第1行, proxy_connect_timeout 5;表示nginx連接后端服務器時,如果超過5秒沒反應,則認為超時
第3行,這里定義了一組服務器aaa_server_group,其中max_fails=1 fail_timeout=60s 表示如果該節點轉發失敗1次,接下來的60秒內,將不再轉發到這臺服務器
第6行,表示如果后端服務器返回502,504,超時等錯誤時,即認為節點失效,自動將請求轉發到其它節點
nginx負載均衡的方案有好幾種,這里我們配置為ip_hash;表示會根據客戶端的IP生成hash,固定轉發到某一臺node,這樣可解決集群環境中session丟失的問題。如果web應用中沒有使用session,去掉ip_hash;即變成輪訊方案。此外,4-6行上,還可以加weight=N來指定權重,按權重轉發,如果服務器配置不均衡,比如某一臺服務器配置特別強,可以考慮將這臺服務器的weight值加大。
如果某臺服務器暫時不想加入負載均衡,在最后加 down即可。
?
最后附送一個小技巧:nginx -t 可以檢查配置文件是否正確?
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的nginx-启动gzip、虚拟主机、请求转发、负载均衡的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于form/input 的autoco
- 下一篇: 《算法图解》第四章笔记与课后练习_快速排