我有一个正在生产的 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 上运行,您的问题就会得到解决。