背景:我正在嘗試在Google雲端平台中設定實例組。這個實例組由許多 nginx 實例組成,其工作只是將傳入的 https 流量重新導向到外部網站。如果傳入的流量是http,則會轉換為https。
為了使實例組正常運作,它必須回應執行狀況檢查請求(採用 http 或 https 協定)並傳回 200。
我遇到的問題是如何定義這樣的 nginx 設定。
這是我的第一次剪輯。它只處理重定向
server {
listen 80;
listen 443 ssl;
ssl on;
ssl_certificate /etc/nginx/ssl/examples.pem;
ssl_certificate_key /etc/nginx/ssl/examples.key;
server_name incoming.examples.com;
return 301 https://target.examples.com$request_uri;
}
我使用 http 協定將健康檢查 url 設定為“/_check”。這是我的第一次嘗試:
server {
listen 80;
location /_check {
return 200 'no content';
}
listen 443 ssl;
ssl on;
ssl_certificate /etc/nginx/ssl/examples.pem;
ssl_certificate_key /etc/nginx/ssl/examples.key;
server_name incoming.examples.com;
return 301 https://target.examples.com$request_uri;
}
nginx 伺服器回應 404。
然後我嘗試轉向location
另一個server
定義:
server {
location /_check {
return 200 'no content';
}
listen 80;
}
server {
listen 80;
listen 443 ssl;
ssl on;
ssl_certificate /etc/nginx/ssl/examples.pem;
ssl_certificate_key /etc/nginx/ssl/examples.key;
server_name incoming.examples.com;
return 301 https://target.examples.com$request_uri;
}
它給了我同樣的結果。這是我在訪問日誌中看到的內容。
130.211.3.85 - - [18/Jan/2017:08:41:25 +0000] "GET /_check HTTP/1.1" 404 168 "-" "GoogleHC/1.0"
130.211.3.81 - - [18/Jan/2017:08:41:29 +0000] "GET /_check HTTP/1.1" 404 168 "-" "GoogleHC/1.0"
130.211.1.249 - - [18/Jan/2017:08:41:30 +0000] "GET /_check HTTP/1.1" 404 168 "-" "GoogleHC/1.0"
130.211.3.85 - - [18/Jan/2017:08:41:30 +0000] "GET /_check HTTP/1.1" 404 168 "-" "GoogleHC/1.0"
130.211.3.81 - - [18/Jan/2017:08:41:34 +0000] "GET /_check HTTP/1.1" 404 168 "-" "GoogleHC/1.0"
130.211.1.249 - - [18/Jan/2017:08:41:35 +0000] "GET /_check HTTP/1.1" 404 168 "-" "GoogleHC/1.0"
130.211.3.85 - - [18/Jan/2017:08:41:35 +0000] "GET /_check HTTP/1.1" 404 168 "-" "GoogleHC/1.0"
130.211.3.81 - - [18/Jan/2017:08:41:39 +0000] "GET /_check HTTP/1.1" 404 168 "-" "GoogleHC/1.0"
130.211.1.249 - - [18/Jan/2017:08:41:40 +0000] "GET /_check HTTP/1.1" 404 168 "-" "GoogleHC/1.0
如果我將更改恢復為第一次嘗試,並更改要使用的運行狀況檢查https
(如以下螢幕截圖所示),
我得到的是 301。在我看來,該網址_check
已被重定向規則覆蓋。
我的問題:如何修改nginx以滿足要求?
答案1
您可以將運行狀況檢查設定為與您定義的任何連接埠一起使用,例如文件。建立健康檢查時可以使用 UI 或命令列:
$ gcloud compute health-checks create https NAME [--check-interval=CHECK_INTERVAL; default="5s"] [--healthy-threshold=HEALTHY_THRESHOLD; default=2] [--host=HOST] [--port=PORT; default=80]
在標誌連接埠上,您可以設定任何您選擇的內容。然後你必須配置你的應用程式來回應它。
server {
location /_check {
return 200 'no content';
}
listen [PORT];
這將避免健康檢查請求與其餘流量一起重新導向。