NodeJS + Nginx 403 禁止,但 URL:PORT 正常运行

NodeJS + Nginx 403 禁止,但 URL:PORT 正常运行

我有一个正在生产的 NODEJS 网站,但我无法访问:

https://mydomain1.com => 403 禁止访问 https://mydomain1.com:443=> 403 禁止访问

但是当我在末尾添加端口“:8080”时,一切正常:

https://mydomain1.com:8080 => 成功!我可以访问我的网站上的任何地方

我不知道为什么我被禁止使用 root 权限,而不是运行我的应用程序的端口 8080?

/etc/nginx/site-available 上的文件“default”(与 /etc/nginx/site-enable 上的文件“default”相同)。

server {
        listen 443 ssl default_server;
        listen [::]:443 ssl default_server;

        root /var/www/html;

        index index.html index.htm index.nginx-debian.html;

        server_name mydomain1.com;

location / {
    proxy_pass http://127.0.0.1:8080;
    proxy_redirect off;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-NginX-Proxy true;
}


server {
    if ($host = mydomain1.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    listen 80;
    listen [::]:80 ipv6only=on;

    server_name mydomain1.com;
    return 404; # managed by Certbot
}

Nginx 错误日志:

2021/04/29 09:29:16 [error] 6136#6136: *6 access forbidden by rule, client: xx.xx.xx.xx, server: mydomain1.com, request: "GET / HTTP/1.1", host: "mydomain1.com"

附言:我今天早上用 Certbot 添加了 SSL 证书,它稍微改变了我的 nginx.conf,但没有变化;我仍然需要在我的 URL 中添加“:8080”才能访问我的网站,而当我删除“:8080”时,我无法访问任何内容。请帮帮我?

编辑:这是我的 NODEJS 网站:

//================= TSL ==========================
const https = require('https');
var tls = require('tls')
var fs = require('fs')

const SSLoptions = {
    key: fs.readFileSync('key.pem'),
    cert: fs.readFileSync('cert.pem')
};

let serverHttps = https.createServer(SSLoptions, app).listen(8080)

如果我删除 /etc/nginx/site-enable 上的“默认”,只保留 /etc/nginx/site-available 上的“默认”,则 mydomain1.com 上会出现“站点不可用”的情况,但 mydomain1:8080 仍然有效。

答案1

我不太了解网站管理,我也没有运行过网站,但从我有限的知识来看,我知道 HTTPS 协议默认使用端口 443,如果未指定端口号,则假定使用默认端口,因此当您尝试访问时https://mydomain1.com您实际上正在尝试访问https://mydomain1.com:443,尚未开放。

要验证,只需尝试访问https://mydomain1.com:443如果您收到相同的 403 Forbidden 错误,那么情况就是这样。

您的443端口没有开放,您的网站运行在8080端口上,所以您必须使用域名+端口号来访问您的网站,因为您的网站不在浏览器假定的默认端口上。

所以我建议您将您的网站改为在端口 443 上运行,您的问题就会得到解决。

相关内容