一.多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 掉,能自動剔除。
2、weight
weight 代表權,重默認爲 1,權重越高被分配的客戶端越多
3、ip_hash
每個請求按訪問 ip 的 hash 結果分配,這樣每個訪客固定訪問一個後端服務器,可以解決 session 的問題。
upstream server_name{
ip_hash
server 192.168.5.212:80;
server 192.168.5.222:80;
}
4、fair(第三方)
按後端服務器的響應時間來分配請求,響應時間短的優先分配。
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