Nginx-SSL 多https證書配置 以及nginx常用配置、高可用負載均衡

一.多https證書配置 

1. 進入nginx目錄,cd /usr/local/nginx/conf

2. 創建cert文件夾,mkdir cert        把下載下來的key上傳到文件夾中

3. 更改nginx.conf文件

新增一個server (如果是多個二級域名有多個證書,每個域名證書都加一個server)

server {
            #1.19版本用下面,不用listen 443;ssl on;

            #listen 443 ssl;
            
            listen 443;
			 server_name testA.test.com;
			 # 文件上傳大小限制
			 client_max_body_size 100m;
             # 設置解決大json返回不完整問題
             proxy_buffers 16 1024k;
             proxy_buffer_size 1024k;

			 ssl on;

			 ssl_certificate   cert/2945634_testA.test.com.pem;
			 ssl_certificate_key  cert/2945634_testA.test.com.key;
			 ssl_session_timeout 5m;
			 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
			 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
			 ssl_prefer_server_ciphers on;

			 location / {
			     root /usr/local/tomcat/sys-admin;
			 		 index index.html;
			 		 
                      location ~ .*\.(jpg|jpeg|gif|png|swf|htm|html|json|xml|svg|woff|ttf|eot|map|ico)$ {
						expires 10d;
						#expires 1h;
					 }
					 location ~ .*\.(js|css)?$ {
						expires 10d;
						#expires 5s;
				     }

			 		 location ~* \.(css|js|jpg|jpeg|gif|png|swf|htm|html|json|xml|svg|woff|ttf|eot|map|ico)$ {
							if (-f $request_filename) {
							    break;
							}
	    			}
	    			
	    			proxy_set_header Host $http_host;
						proxy_set_header X-Real-IP $remote_addr;
						proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
						proxy_set_header X-Forwarded-Proto $scheme;
						proxy_set_header X-NginX-Proxy true;
	    
				   		location ^~/sys {
							proxy_pass       http://127.0.0.1:8802;
						}
					
						# 動態頁面,交給tomcat處理
						if ( !-e $request_filename) {

						}
			
			 }


    }
 server {
        listen 443;
			 server_name testB.test.com;
			 # 文件上傳大小限制
			 client_max_body_size 100m;
             # 設置解決大json返回不完整問題
             proxy_buffers 16 1024k;
             proxy_buffer_size 1024k;

			 ssl on;

			 ssl_certificate   cert/2973071_testB.test.com.pem;
			 ssl_certificate_key  cert/2973071_testB.test.com.key;
			 ssl_session_timeout 5m;
			 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
			 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
			 ssl_prefer_server_ciphers on;

			 location / {
			     root /usr/local/tomcat/sys-admin;
			 		 index index-admin.html;
			 		 
			 		 location ~* \.(css|js|jpg|jpeg|gif|png|swf|htm|html|json|xml|svg|woff|ttf|eot|map|ico)$ {
							if (-f $request_filename) {
							    break;
							}
	    			}
	    			
	    			proxy_set_header Host $http_host;
						proxy_set_header X-Real-IP $remote_addr;
						proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
						proxy_set_header X-Forwarded-Proto $scheme;
						proxy_set_header X-NginX-Proxy true;
	    
				   		location ^~/sys {
							proxy_pass       http://127.0.0.1:8802;
						}
						
						# 動態頁面,交給tomcat處理
						if ( !-e $request_filename) {

						}
			
			 }


    }

報錯問題解決

重啓nginx可能遇到錯誤

nginx: [emerg] unknown directive "ssl" in /usr/local/nginx/conf/nginx.conf:1

這個時候nginx需要進行安裝SSL服務,

去nginx解壓目錄下執行

./configure --with-http_ssl_module

 

2. 如果報錯 ./configure: error: SSL modules require the OpenSSL library.則執行

或者 報錯: make: *** 沒有規則可以創建“default”需要的目標“build” 則執行以下語句

yum -y install openssl openssl-devel

./configure

./configure --with-http_ssl_module

3. 執行 make(切記不能 make install 會覆蓋安裝目錄)

4. 將原來 nginx 備份

cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak

5. 將新的 nginx 覆蓋舊安裝目錄

cp objs/nginx /usr/local/nginx/sbin/nginx

如果報錯,執行 cp -rfp objs/nginx /usr/local/nginx/sbin/nginx

6. 測試 nginx 是否正確

/usr/local/nginx/sbin/nginx -t

二.常用配置和作用

1.正向代理(通過nginx服務器訪問其他網址)

2.反向代理(通過nginx服務器 轉發訪問各個不同服務的節點)

3.負載均衡(通過nginx服務器 轉發各個相同服務的節點)

4.動靜分離(通過nginx服務器 可以分離服務接口和靜態資源的訪問)

 

proxy_buffering 設置

1. proxy_buffering  on;
該參數設置是否開啓proxy的buffer功能,參數的值爲on或者off。
如果這個設置爲off,那麼proxy_buffers和proxy_busy_buffers_size這兩個指令將會失效。 
但是無論proxy_buffering是否開啓,proxy_buffer_size都是生效的

2. proxy_buffer_size  4k;
該參數用來設置一個特殊的buffer大小的。
從被代理服務器(C)上獲取到的第一部分響應數據內容到代理服務器(B)上,通常是header,就存到了這個buffer中。 
如果該參數設置太小,會出現502錯誤碼,這是因爲這部分buffer不夠存儲header信息。建議設置爲4k。

3. proxy_buffers  8  4k;
這個參數設置存儲被代理服務器上的數據所佔用的buffer的個數和每個buffer的大小。
所有buffer的大小爲這兩個數字的乘積。

4. proxy_busy_buffer_size 16k;
在所有的buffer裏,我們需要規定一部分buffer把自己存的數據傳給A,這部分buffer就叫做busy_buffer。
proxy_busy_buffer_size參數用來設置處於busy狀態的buffer有多大。

對於B上buffer裏的數據何時傳輸給A,我個人的理解是這樣的:
1)如果完整數據大小小於busy_buffer大小,當數據傳輸完成後,馬上傳給A;
2)如果完整數據大小不少於busy_buffer大小,則裝滿busy_buffer後,馬上傳給A;

5. proxy_temp_path
語法:proxy_temp_path  path [level1 level2 level3]
定義proxy的臨時文件存在目錄以及目錄的層級。

例:proxy_temp_path /usr/local/nginx/proxy_temp 1 2;
其中/usr/local/nginx/proxy_temp爲臨時文件所在目錄,1表示層級1的目錄名爲1個數字(0-9),2表示層級2目錄名爲2個數字(00-99)

6. proxy_max_temp_file_size
設置臨時文件的總大小,例如 proxy_max_temp_file_size 100M;

7. proxy_temp_file_wirte_size
設置同時寫入臨時文件的數據量的總大小。通常設置爲8k或者16k。

常用表達式語法瞭解

location 指令說明

該指令用於匹配 URL。

語法如下:

1、= :用於不含正則表達式的 uri 前,要求請求字符串與 uri 嚴格匹配,如果匹配成功,就停止繼續向下搜索並立即處理該請求。

2、~:用於表示 uri 包含正則表達式,並且區分大小寫。

3、~*:用於表示 uri 包含正則表達式,並且不區分大小寫。

4、^~:用於不含正則表達式的 uri 前,要求 Nginx 服務器找到標識 uri 和請求字符串匹配度最高的 location 後,立即使用此 location 處理請求,而不再使用 location 塊中的正則 uri 和請求字符串做匹配。

注意:如果 uri 包含正則表達式,則必須要有 ~ 或者 ~* 標識。

常用動靜分離和反向代理配置

 server {
        listen       80;
        server_name  127.0.0.1;
		# 文件上傳大小限制
		client_max_body_size 100m;


        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        # 靜態頁面目錄
               
	   root        F:/ilikeit-crm/back/crm-admin-ui/dist;
		# 默認首頁
        index      index.html;

        location / {

			# 用戶瀏覽器端的緩存設置
			location ~ .*\.(jpg|jpeg|gif|png|swf|htm|html|json|xml|svg|woff|ttf|eot|map|ico)$ {
				expires 2s;
			}
			location ~ .*\.(js|css)?$ {
				expires 2s;
			}
			location ~* \.(css|js|jpg|jpeg|gif|png|swf|htm|html|json|xml|svg|woff|ttf|eot|map|ico)$ {
				if (-f $request_filename) {
						break;
				}
			}
			location ^~/sys {
		    	proxy_pass       http://127.0.0.1:8802;
			}
		
			
			# 動態頁面,交給tomcat處理
			if ( !-e $request_filename) {

			}
		}

 

負載均衡配置

1、輪詢(默認)

每個請求按時間順序逐一分配到不同的後端服務器,如果後端服務器 down 掉,能自動剔除。

2weight

weight 代表權,重默認爲 1,權重越高被分配的客戶端越多

3ip_hash

每個請求按訪問 ip  hash 結果分配,這樣每個訪客固定訪問一個後端服務器,可以解決 session 的問題。

upstream server_name{

      ip_hash

      server 192.168.5.212:80;

      server 192.168.5.222:80;

}

4fair(第三方)

按後端服務器的響應時間來分配請求,響應時間短的優先分配。

upstream server_name{

      server 192.168.5.212:80;

      server 192.168.5.222:80;

      fair;

}

高可用集羣(主從搭建)

使用Keepalived+nginx。利用Keepalived心跳檢測,執行 腳本來檢測nginx的是否正常使用

在兩臺nginx服務器上都搭建安裝Keepalived。創建配置一個虛擬ip。通過訪問虛擬ip來通過nginx(主或從)請求服務。

Keepalived配置文件詳細配置:

global_defs {

    notification_email {

        [email protected]

        [email protected]

        [email protected]

    }

    notification_email_from [email protected]

    smtp_server 192.168.17.129

    smtp_connect_timeout 30

    router_id LVS_DEVEL
    
}

vrrp_script chk_http_port {
    script "/usr/local/src/nginx_check.sh"

    interval 2	#(檢測腳本執行的間隔)

    weight 2

}
vrrp_instance VI_1 {

    state BACKUP	# 備份服務器上將 MASTER 改爲 BACKUP

    interface ens33	//網卡

    virtual_router_id 51	# 主、備機的 virtual_router_id 必須相同

    priority 100	# 主、備機取不同的優先級,主機值較大,備份機值較小

    advert_int 1

    authentication {

    auth_type PASS


    auth_pass 1111

}

virtual_ipaddress {

    192.168.17.50 // VRRP H 虛擬地址

}

檢測腳本:

#!/bin/bash

A=`ps -C nginx –no-header |wc -l`

if [ $A -eq 0 ];then

/usr/local/nginx/sbin/nginx

sleep 2

if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then killall keepalived

fi

fi

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章