【问题标题】:Configuring nginx to allow only https traffic将 nginx 配置为仅允许 https 流量
【发布时间】:2018-12-05 06:10:05
【问题描述】:

我是 linux 环境的超级新手,并尝试将 vps 服务器配置为仅允许 https 请求。我已经阅读了 nginx 文档并尝试了各种重写和返回语句、更改服务器块等。但是到目前为止,我所取得的成就是,站点在 http 和 https 上都具有以下配置。

我想要实现的是将这个子域 admin.example.com 配置为仅服务于 https 请求。

我正在这个位置编辑配置:/etc/nginx/sites-available/default

server {
    listen 80;

    server_name admin.example.com;


    #return 301 https://admin.example.com$request_uri;


    location / {
        proxy_pass http://localhost:5000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection keep-alive;
        proxy_set_header Host $http_host;
        proxy_cache_bypass $http_upgrade;
    }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/admin.byrides.com/fullchain.pem; # man                                                                                                                                                             aged by Certbot
    ssl_certificate_key /etc/letsencrypt/live/admin.byrides.com/privkey.pem; # m                                                                                                                                                             anaged by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

 }

【问题讨论】:

    标签: linux nginx digital-ocean vps


    【解决方案1】:

    您需要设置两个服务器指令,一个用于端口 80,它将流量重定向到端口 443。

    server {
        listen 80;
        server_name admin.example.com;
        return 301 https://$host$request_uri;
    }
    
    server {
        listen 443 ssl;
        ssl on;
    
        ssl_certificate /etc/letsencrypt/live/admin.byrides.com/fullchain.pem; # man                                                                                                                                                           aged by Certbot
        ssl_certificate_key /etc/letsencrypt/live/admin.byrides.com/privkey.pem; # m                                                                                                                                                             anaged by Certbot
        include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
    
        location / {
            proxy_pass http://localhost:5000;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection keep-alive;
            proxy_set_header Host $http_host;
            proxy_cache_bypass $http_upgrade;
        }
    }
    

    【讨论】:

    • 我还要添加“Strict-Transport-Security”和“Content-Security-Policy: upgrade-insecure-requests”标头
    • 通常这应该可以工作,在我的情况下,我使用的是 Auth0 服务,并且它进入了这个配置的登录循环。有任何想法吗?发生的事情是 Auth0 尝试在登录后调用 h tp://admin.example.com 作为回调 url,nginx 将其重定向到 https 地址,它一次又一次地调用 auth0 登录屏幕。
    • 我觉得你需要改变redirect_uri的设置或者Auth0的规则,还要记得清除所有的缓存。您还需要检查您的应用程序是否有非 https 链接(我通常使用whynopadlock.com 来帮助检查我的内容,以确保所有图像/url 都正确指向 https)。
    猜你喜欢
    • 1970-01-01
    • 2015-02-06
    • 1970-01-01
    • 2018-05-08
    • 2020-11-01
    • 2020-09-02
    • 2020-11-14
    • 2011-05-19
    • 1970-01-01
    相关资源
    最近更新 更多