配置 SSL 后无法访问 Nginx Web 服务器

配置 SSL 后无法访问 Nginx Web 服务器

我有一个开发版本的 Django 网站,其域名为“mysite.com”,我过去通过 URL 访问我的网站“http://web01.mysite.com“。我刚刚安装了通配符数字证书,现在无法访问该网站。如果我使用“https://web01.mysite.com“ 或者 ”http://web01.mysite.com“,我收到一条快速的“ERR_CONNECTION_REFUSED”消息。我已经阅读了 Nginx 的 SSL 文档、大量关于在 Nginx 上设置 SSL 的博客文章,并研究了这个错误,但我无法找出问题所在。

我的服务器是 Debian 8.7。我运行的是 Nginx 1.6.2,并且“--with-http_ssl_module”是配置参数之一。我还使用默认的 nginx.conf 文件。nginx 进程在默认帐户“www-data”下运行。

我的证书和私钥文件位于此目录中:

drwr-xr-x   root  root  /srv/ssl/mysite.com/

以下是我位于上述目录中的捆绑证书和私钥文件:

-r--r-----  root  www-data  ssl-bundle.crt
-r--r-----  root  www-data  mysite.com.key

当我配置通配符证书时,我指定“*.mysite.com”作为通用名称。

这是我的 /etc/nginx/sites-enabled/mysite.conf 文件:

server_tokens off;
upstream gunicorn {
    server 127.0.0.1:8000 fail_timeout=0;
}

server {
    #listen 80;
    listen 443 ssl;
    server_name web01.mysite.com;
    ssl_certificate /srv/ssl/mysite.com/ssl-bundle.crt;
    ssl_certificate_key /srv/ssl/mysite.com/mysite.com.key;

    location / {
        root /srv/http/mysite.com/repo;

        # Redirect all HTTP requests to HTTPS
        rewrite ^ https://$server_name$request_uri permanent;
    }

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    client_max_body_size 4G;
    keepalive_timeout 5;

    # Pass static file requests to the file server
    location /static/ {
        proxy_pass http://45.33.33.53;
    }
    location /media/ {
        alias /var/www/mysite.com/media/;
    }

    try_files $uri @django;

    location @django {
        proxy_pass http://gunicorn;
        proxy_redirect off;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;

        # Capture originating IP address of client
        # This allows me to view the HTTP_X_FORWARDED_FOR field in request.META
        # in my login_firewall view.
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

我已经在防火墙上打开了端口 443:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            
REJECT     all  --  loopback/8           anywhere             reject-with icmp-port-unreachable
ACCEPT     icmp --  anywhere             anywhere             state NEW icmp echo-request
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh state NEW
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http state NEW
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https state NEW
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
LOG        all  --  anywhere             anywhere             limit: avg 5/min burst 5 LOG level debug prefix "iptables_INPUT_denied: "
REJECT     all  --  anywhere             anywhere             reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
LOG        all  --  anywhere             anywhere             limit: avg 5/min burst 5 LOG level debug prefix "iptables_FORWARD_denied: "
REJECT     all  --  anywhere             anywhere             reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

如果我执行“sudo netstat -plnt | grep nginx”,我可以看到 Nginx 正在监听端口 443:

tcp   0   0 0.0.0.0:443   0.0.0.0:*   LISTEN    25537/nginx -g daem

我检查了 nginx 错误日志(启用了调试),它是空的。更改 nginx 配置文件后,我确实重新加载了它们。

ssl.conf 是否需要包含在 nginx.conf 或 mysite.conf 文件中?这回答提到这是一项要求,但我没有在 Nginx 文档或我在线阅读的任何配置文章中看到对此的讨论。

有人看到我做错什么了吗?

答案1

看起来您正在从 https 重定向到 https,从而导致重定向循环。我不知道为什么您会收到拒绝连接的消息,但您上面的评论证实了这一点。

您的第二个问题 403 Forbidden 可能是权限问题。运行 Nginx 的用户(nginx.conf 中的用户指令)是否有权访问适用位置块所引用的资源?

相关内容