我有以下服务器块...
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /run/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
include snippets/self-signed.conf;
include snippets/ssl-params.conf;
server_name secondave.net www.secondave.net;
location / {
proxy_pass http://localhost:3000;
}
}
server {
listen 80;
listen [::]:80;
server_name _;
location / {
proxy_pass http://localhost:3000;
}
}
}
不过我希望它能起作用......
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
include snippets/self-signed.conf;
include snippets/ssl-params.conf;
server_name secondave.net www.secondave.net;
location / {
proxy_pass http://localhost:3000;
}
}
server {
listen 80;
listen [::]:80;
server_name _;
}
但如果我尝试这样做,反向代理将不再起作用。为什么两个地方都需要 proxy_pass?
这是我尝试在端口 80 块中调用没有 proxy_pass 的端点......
[ec2-user@... nginx]$ curl --insecure https://secondave.net
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
请注意Welcome to nginx!
,这不是代理站点所说的内容。当我再次添加它时,我再次看到了预期的站点...
[ec2-user@... nginx]$ sudo vi nginx.conf
[ec2-user@... nginx]$ sudo systemctl restart nginx
[ec2-user@... nginx]$ curl --insecure https://secondave.net
<!DOCTYPE html><html><head><meta charSet="utf-8"/><title>THEJa
这是使用 AWSLinux2023,我相信它是 selinux 的一部分,并且 nginx 是使用 yum 安装的。
附加信息
[ec2-user@... ~]$ cat /etc/nginx/nginx.conf
...
http {
...
server {
...
}
server {
listen 80;
listen [::]:80;
server_name secondave.net www.secondave.net;
return 404;
}
}
[ec2-user@... ~]$ sudo systemctl restart nginx
[ec2-user@... ~]$ curl --insecure https://secondave.net
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.22.1</center>
</body>
</html>
答案1
您的server
HTTP 块没有server_name
。因此它不处理请求,但请求被传递给 nginx default_server
,后者通常会显示您看到的页面。
您至少应该有这个端口80
:
server {
listen 80;
listen [::]:80;
server_name <hostname>;
return 404;
}
此配置将为所有失败的请求返回 HTTP 未找到错误代码。