我使用 Nginx Web 伺服器在 Azure VM 上部署了一個應用程式。該應用程式使用supervisor來設定Nginx和gunicorn伺服器。我已經檢查了所有配置和日誌文件,一切似乎都正常工作。但是,當我將瀏覽器指向該網站時,瀏覽器在 www.mydomain.com 上超時,並且 mydomain.com 返回:
This site can’t be reached
mydomain.com’s server DNS address could not be found.
在 Azure 上,我設定了一個 DNS 區域,其中包含:
Name: @ TYPE: NS TTL: 120 VALUE: relevant azure name servers.
Name: www TYPE: CAME TTL 60 mydomain.com
在網域註冊商上,我已根據 azure DNS 名稱設定了 DNS 名稱。
在我的本機上我有:
刷新瀏覽器上的快取。檢查 nslookup www.mydomain.com
Server: 127.0.1.1
Address: 127.0.1.1#53
Non-authoritative answer:
Name: www.mydomain.com
Address: xxx.xxx.xx.xx
嘗試了traceroute,找到了xxx.msn.net位址,沒有任何[關閉],所以我認為找到了伺服器。
嘗試過:
host -t A www.mydomain.com
>>www.mydomian.com is an alias for mydomain.themsazureaddress.com
>>mydomain.themsazureaddress.com has address xxx.xxx.xx.xx
在網頁伺服器上我有:
嘗試過netcat:
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:http *:* LISTEN
tcp 0 0 *:ssh *:* LISTEN
tcp 0 0 *:https *:* LISTEN
tcp 0 0 localhost:8000 *:* LISTEN
tcp 0 0 localhost:6379 *:* LISTEN
和網路統計:
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 62133/nginx
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 62133/nginx
檢查了 nginx 設定:
upstream app_server_wsgiapp {
server localhost:8000 fail_timeout=0;
}
server {
listen 80;
server_name myapp.com;
rewrite ^(.*) https://$server_name$1 permanent;
}
server {
server_name myapp.com;
listen 443 ssl;
檢查nginx錯誤和訪問日誌:
訪問日誌為空,錯誤日誌僅包含:
epoll add event: fd:11 op:1 ev:00000001
我還檢查了進程和主管、gunicorn、redis、celery 都運作正常。我只是使用 sqlite,所以我不需要擔心資料庫設定。
對於調試為什麼我看不到該應用程式還有其他建議嗎?
答案1
使用者 VM 配置中缺少 NSG。
網路安全群組 (NSG) 包含存取控制清單 (ACL) 規則列表,這些規則允許或拒絕虛擬網路中虛擬機器執行個體的網路流量。
NSG 可以與子網路或該子網路內的各個 VM 實例關聯。當 NSG 與子網路關聯時,ACL 規則適用於此子網路中的所有 VM 執行個體。此外,透過將 NSG 直接關聯到單一虛擬機,可以進一步限制該虛擬機的流量。
在 Azure 入口網站中設定 NSG:
https://docs.microsoft.com/en-us/azure/virtual-network/virtual-networks-create-nsg-arm-pportal