我遇到了一个我不明白的奇怪问题。我使用 EE 引擎脚本在 linode 上安装了一个 wordpress 博客,使用的是 NGINX。过去这种方法效果很好。
该脚本为我的域名安装了一个 VHOST(我们称之为 example.com),/etc/nginx/sites-available 中的最终结果是:
- 默认
- 示例.com
- 22222(管理工具,这些不是问题)
问题 :
在 linode 中设置 DNS 后,一切似乎都运行正常。Example.com 毫无问题地打开了 WordPress 博客。然而,在我的办公室,NGINX 会恢复为默认设置!... 因此,在家里和其他地方都没有问题,而在其他一些地方(如办公室),NGINX 会给我默认的 index.xxx(带有 NGINX 正在工作的消息)。同样,笔记本电脑,同样的浏览器,一切都一样,但解析不同,具体取决于我所在的物理位置。
解决方案1:
通过在配置中将其设为 default_server 来强制 NGINX 使用 example.com。这可行,但这不是解决问题的必经之路,因为 NGINX 应该捕获域名并提供正确的网站。否则,当我将来在其上设置更多网站时,我如何才能相信它会提供正确的页面?
解决方案2:
文件:etc/nginx/sites-enabeled/default 包含以下几行:
# Default server configuration
#
server {
listen 80 default_server;
listen [::]:80 default_server;
# SSL configuration
# ......
每当我注释掉第二个 listen 指令时,即:
listen [::]:80 default_server;
我保留第一个,然后 NGINX 正确解析我的域名,而 /etc/nginx/sites-enabled/default 仍然是 default_server。
这似乎是正确的行为,对吗?
问题:
所以,现在我想知道这是否真的是正确的行为,为什么会这样,以及这是否是一个错误或只是一个配置错误。
漏洞 ??? :因为使用原始配置(包括第二条指令),NGINX 可以从我家正确旋转,但不能从我的工作场所旋转(相同的笔记本电脑、浏览器等)。不一致
配置错误????:你告诉我为什么会这样,以前它无法仅从我的工作场所正确解析......
答案1
listen
我的猜测是,您在服务器配置中没有 IPv6指令example.com
,但在 IPv6 不起作用的地方使用 IPv6 访问网站。
在这种情况下,该listen [::]:80 default_server;
指令会捕获该请求,因为没有任何内容与 匹配example.com
。如果删除此行,服务器将完全恢复到 IPv4,一切正常。
在这种情况下,正确的解决方案是添加listen [::]:80
到example.com
服务器节。