我使用 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 地址没有任何 [closed],所以我推测服务器已经找到了。
尝试过:
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
和 netstat:
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) 规则,这些规则允许或拒绝虚拟网络中 VM 实例的网络流量。
NSG 可以与子网或该子网内的单个 VM 实例相关联。当 NSG 与子网相关联时,ACL 规则将应用于该子网中的所有 VM 实例。此外,通过将 NSG 直接关联到该 VM,可以进一步限制流向单个 VM 的流量。
在 Azure 门户中配置 NSG:
https://docs.microsoft.com/en-us/azure/virtual-network/virtual-networks-create-nsg-arm-pportal