Nginx 在本地网络上禁用 SSL

Nginx 在本地网络上禁用 SSL

我正在尝试为外部世界和我的本地网络提供同一个网站。如果从我的本地网络访问,我不需要 SSL(以避免添加证书)并且不需要用户登录,而从外部世界访问,我需要身份验证和 SSL。我曾考虑过类似的事情,但不幸的是,从我的本地网络访问总是会将我重定向到 SSL 服务器。

server {
    listen 443 ssl http2 default_server;
    listen [::]:443 ssl http2 default_server;
    server_name my.server.com;

    ssl_certificate /etc/letsencrypt/../fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/../privkey.pem; # managed by Certbot

    include snippets/ssl-settings.conf;

    auth_basic "Restricted Content";
    auth_basic_user_file /etc/nginx/auth.d/auth.pwd;

    root /var/www/html;

    location / {
            try_files $uri $uri/ =404;
    }

    include /etc/nginx/locations-enabled/*.conf;
}
server {
    listen 80 http2;
    listen [::]:80 http2;
    server_name myhost.local;

    allow 10.10.1.0/24;
    deny all;
    satisfy any;

    root /var/www/html;

    location / {
            try_files $uri $uri/ =404;
    }
    include /etc/nginx/locations-enabled/*.conf;
}

我错过了什么?

答案1

如果您的网站有 SSL,那么您也应该将其保留在 SSL 上以进行本地连接。

如果您要求信任该证书,则意味着:

  • 首先它没有正确配置
  • 或者你正在使用过时的网络浏览器
  • 或者您的工作站上的时间配置不正确
  • 或者您的网络配置有问题(DNS、防火墙、HTTP 代理……)

至于 2017 年,我认为没有任何理由在未加密的 HTTP 上建立网站。

您应该在生产和开发站点上使用 SSL。使用 SSL 还可以使您受益于 HTTP2 的速度提升。现代浏览器不支持未加密连接的 HTTP2。

答案2

如果您尝试在内部避免使用 SSL 的唯一原因是避免使用第二个证书(假设您有 www.external.com 并且不想要 www.internal.com 证书),您可以操作您的主机文件或内部 DNS 服务器以将 www.external.com 更改为您服务器的内部 IP 地址。

更改内部 DNS 是一个更好的选择,因为它不会破坏用户仅在现场访问的假设。

我已经在多台机器上成功完成此操作,主要用于 SharePoint。

相关内容