日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

部署nginx反向代理及缓存

發(fā)布時間:2024/9/20 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 部署nginx反向代理及缓存 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

第一,???nginx?的介紹

???????? 1 nginx?0.7.48?版本后凱斯,支持烈士squid的緩存功能。該緩存是把URL及相關組合當作key,然后用md5編碼哈希后保存在硬盤上,因此nginx?支持任意的URl連接,同時也支持404/301/302?這樣非200?狀態(tài)碼。雖然目前官方nginx web?緩存服務器只能為指定的URL或者狀態(tài)碼設置過期時間,但是不支持類似squidpurge?指令,需要手動清除緩存頁面,但是,通過第三方的nginx模塊,可以清楚指定URL的緩存,當然nginxweb緩存服務主要是由proxy_cache相關指令集和fastcgi_cache相關指令集構(gòu)成,而proxy_cache?主要是用于反向代理,又來緩存后端服務器的內(nèi)容源而Fastcgi_cache?主要緩存的是動態(tài)程序

下載相關的軟件包

prce-8.00.tar.gz??? ngx_cache_purge-1.2.tar.gz?? nginx-0.8.53.tar.gz?

第三 安裝相關的軟件包?

#tar? xvf? prce-8.00.tar.gz

#cd? prce-8.00

#./configure

#make && make install?

#useradd -s /sbin/nologin ?www

#cd ../

#tar xvf ngx_cache_purge-1.2.tar.gz

#tar? nginx-0.8.53.tar.gz

#cd nginx-0.8.53

#./configure? --user=www group=www add-module=../ngx_cache_purge-1.2 prefix=/usr/local/nginx? --with-http_stub_status_module?? --with-http_ssl_module

#make && make install?

第四,修改并配置nginx??

#cd /usr/local/nginx/conf

?#vim nginx.conf?

? #nginx 運行的用戶?user? nobody;

#開啟的進程數(shù)

worker_processes? 1;

#定義錯誤日志的路徑及其日志級別

error_log /usr/local/nginx/logs/error.log crit;

#nginx?的進程

pid??????? logs/nginx.pid;?

#specifiles the value for maximum file descriptors that can be opened by this process

#文件句柄數(shù),和系統(tǒng)單進程打開的文件數(shù)相同,不必理會進程個數(shù)

worker_rlimit_nofile? 65535;

events {

??? use epoll;

??? worker_connections? 1024; #定義的是單個進程的連接數(shù),該值受系統(tǒng)進程打開文件數(shù)限制,需要修改打開的文件句柄數(shù),但是max_client = worker_proxesses X work_connextions

}

http {

??? include?????? mime.types;

??? default_type? application/octet-stream;

#日志的格式

??? log_format? main? '$remote_addr - $remote_user [$time_local] "$request" '

????????????????????? '$status $body_bytes_sent "$http_referer" '

????????????????????? '"request_method $scheme://$host$request_uri $server_protocol" $status $body_bytes_sent'

????????????????????? '"$http_user_agent" "$http_x_forwarded_for"';

?? #?指定服務器名稱哈希的大小,hash bucket size?等于一路處理器緩存大小,與server_names_hash_max_size?共同控制保存服務器名的HASH

?? server_names_hash_bucket_size 128;

? #?以下兩項是設定客戶端請求Header頭緩存去的大小,4?為個數(shù)。128k?為大小。申請4128k。當http?uri太長或者request header?過大時會報414? Request URI too large?或者400 bad request

?? client_header_buffer_size 32k;

?? large_client_header_buffers 4 128k;

?#HTTP請求的BODY?最大限制,若超出此值,報413 Request Entity Too Lager?

?? client_max_body_size 8m;??

?

#緩沖去代理用戶請求的最大字節(jié)數(shù),可以理解為先保存本地,然后在傳給用戶

client_body_buffer_size 32k;

? ?#不允許客戶端主動關閉連接,如果該項為設置在nginx的日志中可能出現(xiàn)499 錯誤

?? proxy_ignore_client_abort on;

?? #nginx?和后端服務器連接超時時間 發(fā)起握手等候響應時間

?? proxy_connect_timeout 5;

? #連接成功后等候后端服務器響應時間,其實已經(jīng)進入后端的排隊等候處理

?? proxy_read_timeout 60;

?? #后端服務器數(shù)據(jù)回傳時間,就是在規(guī)定的時間內(nèi)后端服務器必須傳完所有的數(shù)據(jù)

??proxy_send_timeout 5; ?

#代理請求緩存去,該緩存去間保存用戶的頭信息,以供nginx進行規(guī)則處理一般只要保能保存下頭信息即可?

?proxy_buffer_size 32k;?

#告訴nginx保存單個用的幾個buffer?最大用多少空間

proxy_buffers? 4 64k;

#高負載下緩沖大小(proxy_buffers*2)

?? ?proxy_busy_buffers_size 128k;

? ?#設置緩存文件夾大小,如果大于該值,將從upstream?服務器傳遞請求,而不緩沖到磁盤上

? ??proxy_temp_file_write_size 1024m;

? ?#這個將為打開文件指定緩存,默認是沒有啟用的,max指定緩存數(shù)量,建議和打開文件數(shù)一致,inactive是指經(jīng)過多長時間文件沒被請求后刪除緩存。

? ? open_file_cache max=102400 inactive=20s;

? ? #這個是指多長時間檢查一次緩存的有效信息。

? ? open_file_cache_valid 30s;

? ? #open_file_cache指令中的inactive參數(shù)時間內(nèi)文件的最少使用次數(shù),如果超過這個數(shù)字,文件描述符一直是在緩存中打開的,如上例,如果有一個文件在inactive時間內(nèi)一次沒被使用,它將被移除。

open_file_cache_min_uses 1;??? ?

??#shutdown error display nginx version

??? ?#?關閉錯誤時的nginx?的版本顯示

??? server_tokens off;?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

?

?? #open os function sendfile

??? #?打開高效的文件傳輸模式

sendfile??????? on;

?#tcp_nopush???? on;

??? tcp_nopush???? on; #?打開linux TCP_CORK,只有sendfile?打開時,該項才有效,用來發(fā)送系統(tǒng)HTTP response headers?設置選項的目的是告訴TCP協(xié)議不要僅僅為清空發(fā)送的緩存而發(fā)送報文段。通常三個設置TCPNOPUSH?插口選項。當請求長度超過報文段最大長度時,協(xié)議就好可能發(fā)出滿長度的報文段,這樣可以減少報文段的數(shù)量,減少的程度取決于每次發(fā)送的數(shù)量

??? keepalive_timeout? 60;

??? tcp_nodelay on; #打開TCP_NODELAY?在包含了keepalived?才有效,上面的四項有效的提高了文件傳輸性能,用sendfile() 函數(shù)來轉(zhuǎn)移大量的數(shù)據(jù),協(xié)議會需要預先解決數(shù)據(jù)包包頭部分,正常情況下包頭很小,而且套接字上設置了TCP_NODELAY?。有包頭的包將被立即傳輸,在一些情況下,因為包成功的被對方收到后需要請求對方確認,這樣,大量的數(shù)據(jù)傳輸就會被延遲而且產(chǎn)生大量不必要的網(wǎng)絡流量交換,但是在socket上是指了TCP_CORK?,就像個管道塞住塞子把帶有包頭的包填滿數(shù)據(jù),所有的數(shù)據(jù)根據(jù)大小進行填充,自動通過數(shù)據(jù)包發(fā)送出去,但是在數(shù)據(jù)傳送完成是,需要把塞子打開????

?? #開啟gzip?的設置

#gzip? on;

gzip? on;

#設置允許壓縮的頁面的最小字節(jié)數(shù),頁面字節(jié)數(shù)從Header?頭中的Content-Length中獲取建議設置成大于1k的字節(jié)數(shù),小于1k可能越壓越大

??? gzip_min_length 1k;

??? #設置以16k為單位4倍申請內(nèi)存做壓縮結(jié)果緩存,默認值是申請跟原始數(shù)據(jù)相同大小的內(nèi)存空間存儲gzip壓縮結(jié)果

gzip_buffers 4 16k;

#默認1.1?,大部分瀏覽器支持gzip?壓縮

gzip_http_version 1.1;

#設置壓縮級別 壓縮比率1-9,壓縮比率越大,越消耗系統(tǒng)資源

?gzip_comp_level 2;

#設置壓縮列席

gzip_types?? text/plain application/x-javascript text/css application/xml;

#設置前端的緩存服務,如squid緩存經(jīng)過nginx壓縮的數(shù)據(jù),該選項在做反向代理是設定壓縮,后面參數(shù)為驗證的header頭信息,在做相應的壓縮處理,

??? gzip_vary on;???

?? #proxy_cache???

?

? #?該處設置的是緩存的目錄及其設置的大小

??? proxy_cache_path? /usr/local/nginx/proxy_temp levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;

?? #設置負載池

?? upstream backend_server {

server 192.168.2.194:80 ;

?#?weight設置的權(quán)重? max_fails?設置的是健康監(jiān)測失敗次數(shù),timeout?設置超時時間 當然此處主要是設置nginx的反向代理及其緩存,對于nginx?的負載均衡,在以后的文章中再詳細介紹

# server 192.168.2.107:80 weight=1 max_fails=2 fail_timeout=30s;

? } ???

server {

??? #:監(jiān)聽的端口號

??????? listen?????? 80;

?? ? ? ?#server_name? localhost;

?? ? ? ? #設置監(jiān)聽的主機名

?? ? ? ? ?server_name?freehat.blog.51cto.com;

?? ? ? ? ? if ($host !~ 'freehat.blog.51cto.com') {

?? ? ? ? ? ? return 403;

?? ? ? ? ?}

??????? #charset koi8-r;

??? ? ??#access_log? logs/host.access.log? main;

? ? ? ? ?#location / {

? ? ? ? ?# ? root?? html;

? ? ? ? ?# ? index? index.html index.htm;

? ? ? ? #}???

??????? #error_page? 404????????????? /404.html;

??????? # redirect server error pages to the static page /50x.html

??????? #

?? ??error_page?? 500 502 503 504? /50x.html;

??????? location = /50x.html {

??????????? root?? html;

??????? }?? ? ?

? ? ? ? #設置擴展名以gif? .jpg .css?等結(jié)尾的靜態(tài)文件緩存

?????? location ~.*\.(gif|jpg|jpeg|png|bmp|sqf|js|css)$

???????? {???

?? ? ? ? ? ??#設置防盜鏈

?? ? ? ? ? valid_referers none blocked freehat.blog.51cto.com;

?? ? ? ? ? if ($invalid_referer) {

?? ? ? ? ? ?return 404?

???????????? #如果后端的服務器返回502 504?執(zhí)行超時等錯誤,自動將請求轉(zhuǎn)發(fā)到upstream?負責均衡池中的另外一臺服務器,實現(xiàn)故障轉(zhuǎn)移

???????????? proxy_next_upstream http_502 http_504 error timeout invalid_header;

???????????? #進行緩存,使用web緩存去cache_one

???????????? proxy_cache cache_one;

???? ???????#以域名,URI,參數(shù)組合成web緩存的Key值,Nginx根據(jù)Key值哈希,儲存緩存內(nèi)容到二級緩存目錄內(nèi)

??????????? #對不同的HTTP?狀態(tài)碼設置不同的緩存時間

???????????? proxy_cache_valid 200 304 12h;

???????????? proxy_cache_valid any 1m;

???????????? proxy_set_header Host $host;

???????????? proxy_set_header X-Real-IP $remote_addr;

???????????? #設定proxy_set_header? Accept-Encoding?或者是后臺服務器關閉gzip,該臺機器才不會緩存被壓縮的文件,造成亂碼

???????????? proxy_set_header Accept-Encoding "none";

??????????? # proxy_set_header Accept-Encoding "";?同上面一項相同

???????????? #設置proxy_cache?支持后臺設定的expires?, 即使支持HTTP頭信息定義的緩存規(guī)則

???????????? proxy_ignore_headers "Cache-Control" "Expires";

???????????? if ( !-e? $request_filename )

??????????????? {

??????????????? proxy_pass??http://backend_server;

???????????????? }注: 該項是如果client?請求的文件在cache?中保存,nginx?直接從cache中把對應的文件返還給client?,不會在去后端的Server?去取對應的文件

???????????? expires 1h;??設置過去的時間

}

#set don't? php jsp cgi in cache??設置php jsp cgi?不保存在cache

? location ~.*\.(php|jsp|cgi)?$

?? {

???? proxy_set_header Host $host;

???? proxy_set_header X-Forwarded-For $remote_addr;

???? proxy_pass http://backend_server;

??? }

#set js and css cache? expire time?設置js|css?在瀏覽器中過期的時間

?????? location ~ .*\.(js|css)

??????????? {

??????????????? expires? 1h;

???????????? }

#clean all cache??設置清除所有的cache

?location ~/purge(/.*)

?????? {

?????? allow?? 127.0.0.1;

?????? allow? 192.168.2.0/24;

?????? deny??? all;

?????? proxy_cache_purge cache_one $host$1$is_args$args;

????? }

??? }

}

?第五,啟動機及其關閉nginx的命令

??1 啟動之前檢查nginx的主配置文件是否有錯誤

?? ? #?/usr/local/nginx/sbin/nginx ?-t

??2 ?啟動nginx的方式

?? ? ?#?/usr/local/nginx/sbin/nginx ?-c ?/usr/local/nginx/conf/nginx.conf?

??3 關閉nginx 的方式

?? ? ?#?/usr/local/nginx/sbin/nginx ?-s ?stop

??4 平滑啟動nginx?

?? ? ?#kill ?-HUP ?`cat /usr/local/nginx/logs/nginx.pid`

?

轉(zhuǎn)載于:https://blog.51cto.com/freehat/511002

與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的部署nginx反向代理及缓存的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。