1. 程式人生 > 其它 >nginx反向代理https網站 並實現網站的註冊和登入功能

nginx反向代理https網站 並實現網站的註冊和登入功能

最近給我們官網做了新加坡、中國香港、美國、加拿大地區的反代,由於現階段發展有限,只好選擇這種最節約的方法了,但並非負載均衡,負載均衡等後期商城確定了要做。 除了加拿大是高配機器之外,其他都是小云伺服器,中國香港是阿里雲的。 所以用了軍哥的一鍵lnmp來做的基礎,當然只是反代是不需要太多的,不用任何一鍵指令碼都可以,我是為了更多的檢測,加上時間關係,就用了軍哥的。 nginx反代多數是用sub_filter,但是這個需要ngx_http_sub_module模組,剛好軍哥的安裝包就自帶編譯了,所以很方便。 開始工作: 一、給伺服器上面安裝nginx、php、帶上http_sub_module、pcre-devel、openssl模版編譯即可。(其他模組常見的就不說了,一鍵指令碼都有,反代用到的也少)

軍哥一鍵安裝包:lnmp.org

手動編譯nginx在這裡我就不說了。

二、配置反向代理規則

一鍵包安裝好之後,已經預設有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網站關係,這樣做下來,反代的網站,功能上都正常,包括支付功能。 下次做負載均衡了,也會靠這個的大部分配置。