【问题标题】:Can't connect to my webserver from within the local network无法从本地网络连接到我的网络服务器
【发布时间】:2017-09-18 23:36:24
【问题描述】:

它可以从外部工作 (ipv4)。

我的 nginx 配置必须搞砸,因为当我浏览 192.168.xxx.xxx(我的网络服务器的地址)时,我会被转发到我主页的 DNS。即使我在网络服务器本身的浏览器栏中使用“localhost”或“0.0.0.0”,它也不起作用。

谁能告诉我如何正确解决这个问题?如果我插入除“cooldomain.com”之外的任何其他内容,它就无法从外部访问,对吧?但必须有一个解决方案。

nginx服务器运行在docker容器中,基于官方的nginx镜像。

这是我的 nginx 配置文件:

server {
    listen 80;
    listen 443 ssl http2;
    server_name cooldomain.com;
    ssl_protocols TLSv1.2;
    ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
    ssl_prefer_server_ciphers On;
    ssl_certificate /usr/share/nginx/fullchain.pem;
    ssl_certificate_key /usr/share/nginx/privkey.pem;
    ssl_trusted_certificate /usr/share/nginx/chain.pem;
    ssl_session_cache shared:SSL:128m;
    add_header Strict-Transport-Security "max-age=31557600; includeSubDomains";
    ssl_stapling on;
    ssl_stapling_verify on;

    # Your favorite resolver may be used instead of the Google one below
    # resolver 8.8.8.8;
    # /usr/share/nginx/html;
    # index index.html;

    # charset koi8-r;
    # access_log  /var/log/nginx/host.access.log  main;

    location / {
    if ($scheme = http) {
            return 301 https://$server_name$request_uri;
        }
        root   /usr/share/nginx/html;
        # index  index.html index.htm;
    try_files $uri$args $uri$args/ /index.html;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

编辑:

docker ps 的输出:

faXXXXX nginx "nginx -g 'daemon off" 14 minutes ago, up 14 minutes 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp webserver (很遗憾,这不是复制粘贴)

curl -v 的输出http://127.0.0.1:

$ curl -v http://127.0.0.1
Rebuilt URL to: http://127.0.0.1/
Trying 127.0.0.1...
Connected to 127.0.0.1 (127.0.0.1) port 80 (#0)
GET / HTTP/1.1
Host: 127.0.0.1
User-Agent: curl/7.47.0
Accept: 

HTTP/1.1 301 Moved Permanently
Server: nginx/1.13.3
Date: Wed, 20 Sep 2017 15:46:55 GMT
Content-Type: text/html
Content-Length: 185
Connection: keep-alive
Location: https://cooldomain.com/
Strict-Transport-Security: max-age=31557600; includeSubDomains

Connection #0 to host 127.0.0.1 left intact

【问题讨论】:

  • 这是在虚拟机中运行吗?请详细说明基础架构
  • 你有一个 if 块,它重定向到 server_name - 如果你删除它会发生什么?
  • @TarunLalwani 在 docker 容器中,是的。 :) 将其添加到问题中。
  • @RichardSmith 然后,http 连接被允许并且不转发到 https。
  • 请添加docker ps 的输出,并请告知您是否正在docker主机系统本身上测试本地主机

标签: nginx dns webserver router nat


【解决方案1】:

我设法解决了这个问题。我不知道这是否是正确的方法,但它确实有效。

我在我的服务器块之前添加了另一个服务器块,它具有 default_server 前缀。

如果您有更好的想法,请随时写一个答案。 :)

这就是我的配置文件现在的样子。注意第一块:

server {
    listen 80;
    server_name 127.0.0.1 default_server;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

server {
    listen 80;
    listen 443 ssl http2;
    server_name cooldomain.com;
    ssl_protocols TLSv1.2;
    ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
    ssl_prefer_server_ciphers On;
    ssl_certificate /usr/share/nginx/fullchain.pem;
    ssl_certificate_key /usr/share/nginx/privkey.pem;
    ssl_trusted_certificate /usr/share/nginx/chain.pem;
    ssl_session_cache shared:SSL:128m;
    add_header Strict-Transport-Security "max-age=31557600; includeSubDomains";
    ssl_stapling on;
    ssl_stapling_verify on;

    # Your favorite resolver may be used instead of the Google one below
    # resolver 8.8.8.8;
    # /usr/share/nginx/html;
    # index index.html;

    # charset koi8-r;
    # access_log  /var/log/nginx/host.access.log  main;

    location / {
    if ($scheme = http) {
            return 301 https://$server_name$request_uri;
        }
        root   /usr/share/nginx/html;
        # index  index.html index.htm;
    try_files $uri$args $uri$args/ /index.html;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-15
    • 2016-05-14
    • 2021-09-08
    • 2016-01-09
    • 1970-01-01
    • 1970-01-01
    • 2020-07-15
    相关资源
    最近更新 更多