nginx反代多數是用sub_filter,但是這個需要ngx_http_sub_module子產品,剛好軍哥的安裝包就自帶編譯了,是以很友善。
開始工作:
一、給伺服器上面安裝nginx、php、帶上http_sub_module、pcre-devel、openssl模版編譯即可。(其他子產品常見的就不說了,一鍵腳本都有,反代用到的也少)
二、配置反向代理規則
一鍵包安裝好之後,已經預設有nginx.conf檔案了,是以我們就直接修改nginx.conf就行。
1:先建立緩存檔案夾
mkdir /home/cache/path -p
mkdir /home/cache/temp -p
2:修改nginx.conf檔案中的http區域,在這裡增加反代的緩存設定。還有wordpress正常功能的配置。如果不是wordpress網站可以不要那幾句。
http
{
include mime.types;
default_type application/octet-stream;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 50m;
sendfile on;
tcp_nopush on;
keepalive_timeout 60;
tcp_nodelay on;
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 256k;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
gzip_disable "MSIE [1-6]\.";
#limit_conn_zone $binary_remote_addr zone=perip:10m;
##If enable limit_conn_zone,add "limit_conn perip 10;" to server section.
#從這裡開始就是在http區域裡面添加的,上面的是預設就有的,可以不動。
#這一段是為了wordpress的功能
#map $http_cookie $logged_in {
#default 0;
#~SESS 1; # Drupal session cookie
#~wordpress_logged_in 1; # WordPress session cookie
#}
#下面這段就是反代緩存設定了
server_tokens off;
access_log off;
client_body_buffer_size 512k;#緩沖區代理緩沖使用者端請求的最大位元組數
proxy_connect_timeout 5;#nginx跟後端伺服器連接配接逾時時間(代理連接配接逾時)
proxy_read_timeout 60;#連接配接成功後,後端伺服器響應時間(代理接收逾時)
proxy_send_timeout 5;#請求的逾時時間
proxy_buffer_size 16k;#設定代理伺服器(nginx)儲存使用者頭資訊的緩沖區大小
proxy_buffers 4 64k;#proxy_buffers緩沖區,網頁平均在64k以下
proxy_busy_buffers_size 128k; #高負荷下緩沖大小(proxy_buffers*2)
proxy_temp_file_write_size 128k;
proxy_temp_path /home/cache/temp;
proxy_cache_path /home/cache/path levels=1:2 keys_zone=cache_one:100m inactive=3d max_size=5g;
#這一段就是反代的一些緩存和設定,最後一句cache_one為緩存區名字,100m是記憶體占用, 3d是3天删除, 5g是緩存空間,
這些時間隻是做鏡像反代不用設定太長,如果是做叢集負載就可以加長互相的連接配接時間。
3:修改nginx.conf檔案中的server區域,在這裡增加反代的proxy規則
反代域名的80端口監聽設定
server {
listen 80;
server_name cs.test.com;#反代域名
#這裡的跳轉,如果不是要反代ssl網站就不用了
if ( $scheme = http ){
return 301 https://$server_name$request_uri;
}
#屏蔽蜘蛛,防止降級,反代别人的網站。。。就随便了
if ($http_user_agent ~* (baiduspider|360spider|haosouspider|googlebot|soso|bing|sogou|yahoo|sohu-search|yodao|YoudaoBot|robozilla|msnbot|MJ12bot|NHN|Twiceler)) {
return 403;
}
#反代規則設定
location / {
sub_filter www.test.com cs.test.com; #網站域名,反代域名
sub_filter_once off;#進行替換
proxy_cache cache_one;
#緩存區名稱
proxy_cache_valid 200 304 3h;
#200 304狀态緩存3小時
proxy_cache_valid 301 3d;
#301狀态緩存3天
proxy_cache_valid any 10s;
#其他狀态緩存(如502 404)10秒
proxy_cache_key "$scheme://$host$request_uri";
#緩存key規則,自動清除緩存
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#向後端傳遞訪客ip
proxy_set_header Referer http://www.test.com;
#強制定義Referer
proxy_set_header Host www.test.com;
#定義主機
proxy_pass http://www.test.com;
#
proxy_set_header Accept-Encoding "";
#重要 将資訊傳遞到伺服器端
}
}
這個80端口,也可以取消加到下面433一起去。如果不做https的ssl反代就用上面這個就行了。
我看國外的一些網站上,基本都是分别建立server,國内的看見幾個都是加在一起的,但是我加在一起的時候,出現過問題,另外為了友善自己,畢竟是80要強制跳轉到433的,是以我單獨建立了。反代網站最好是用ssl吧,可以防止被判為非法。
server
{
listen 443 ssl;
ssl on;
ssl_certificate /usr/local/nginx/ssl/cs.test.com.crt;
ssl_certificate_key /usr/local/nginx/ssl/cs.test.com.key;
#這裡的域名證書是你反代的域名的證書,現在免費證書網上一大堆可以申請的,就不說了
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_timeout 10m;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_buffer_size 1400;
add_header Strict-Transport-Security max-age=15768000;
ssl_stapling on;
ssl_stapling_verify on;
#跳轉https
if ( $scheme = http ){
return 301 https://$server_name$request_uri;
}
#屏蔽蜘蛛,防止降級
if ($http_user_agent ~* (baiduspider|360spider|haosouspider|googlebot|soso|bing|sogou|yahoo|sohu-search|yodao|YoudaoBot|robozilla|msnbot|MJ12bot|NHN|Twiceler)) {
return 403;
}
#反代規則設定
location / {
sub_filter www.test.com cs.test.com; #網站域名,反代域名
sub_filter_once off;
proxy_cache cache_one;
#緩存區名稱
proxy_cache_valid 200 304 3h;
#200 304狀态緩存3小時
proxy_cache_valid 301 3d;
#301狀态緩存3天
proxy_cache_valid any 10s;
#其他狀态緩存(如502 404)10秒
proxy_cache_key "$scheme://$host$request_uri";
#緩存key規則,自動清除緩存
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#向後端傳遞訪客ip
proxy_set_header Referer https://www.test.com;
#強制定義Referer
proxy_set_header Host www.test.com;
#定義主機
proxy_pass_header Set-Cookie;
#這兩句是為了實作wordpress的正常功能
#proxy_cache_bypass $logged_in;
#proxy_no_cache $logged_in;
#這兩句是為了實作wordpress的正常功能
proxy_pass https://www.test.com;
#這種寫法,這裡就必須得是https
proxy_set_header Accept-Encoding "";
#重要将資訊傳遞到伺服器端
}
}
}
最後看看nginx -t有沒有什麼文法錯誤,有就修改,沒有就重新開機nginx,看有沒有生效。
我們做這個純屬因為wordpress網站關系,這樣做下來,反代的網站,功能上都正常,包括支付功能。
下次做負載均衡了,也會靠這個的大部配置設定置。