971 字
5 分钟
1panel面板添加静态网站nginx404问题记录

问题#

内网设备,通过有公网IP的阿里云服务器实现内网穿透,阿里云服务器的10080端口映射到内网设备的80端口

在1panel面板中添加静态网站,例如我想通过公网IP:10080访问,那么nginx的配置文件里需要监听这个公网IP:10080,如果只监听内网IP:80肯定是不可以的,会导致内网IP:80可以正常访问但是公网IP:10080访问时报nginx404

我在1panel中创建静态网站时填写的公网IP:10080,在创建后补充了一个内网IP:80,但是既不能通过公网IP访问,又不能通过内网IP访问

分析#

是否为浏览器缓存问题#

首先Ctrl+F5强制刷新浏览器缓存,然后访问,报nginx404

然后打开无痕窗口再次尝试访问,报nginx404

基本可以排除浏览器缓存问题

查看配置文件#

打开配置文件后一眼看出问题,配置文件内容如下:

报nginx404时的配置文件:

Terminal window
server {
listen 10080 ;
listen [::]:10080 ;
server_name 8.XXX.XXX.xxx 192.168.0.105;
index index.php index.html index.htm default.php default.htm default.html;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Real-IP $remote_addr;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
access_log /www/sites/8.xxx.xxx.xxx/log/access.log main;
error_log /www/sites/8.xxx.xxx.xxx/log/error.log;
location ^~ /.well-known/acme-challenge {
allow all;
root /usr/share/nginx/html;
}
root /www/sites/8.xxx.xxx.xxx/index;
error_page 404 /404.html;
}

可以正常访问时的配置文件:

Terminal window
server {
listen 80 ;
listen [::]:80 ;
listen 10080 ;
listen [::]:10080 ;
server_name 192.168.0.105 8.XXX.XXX.xxx;
index index.php index.html index.htm default.php default.htm default.html;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Real-IP $remote_addr;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
access_log /www/sites/192.168.0.105/log/access.log main;
error_log /www/sites/192.168.0.105/log/error.log;
location ^~ /.well-known/acme-challenge {
allow all;
root /usr/share/nginx/html;
}
root /www/sites/192.168.0.105/index;
error_page 404 /404.html;
}

第一个创建的过程:

  • 设置公网中访问网站的IP和端口为8.XXX.XXX.xxx:10080,然后在「网站设置」>「域名设置」>「新增域名」,补充了192.168.0.105:80

第二个创建的过程:

  • 设置访问网站的IP和端口为192.168.0.105:80,然后在「网站设置」>「域名设置」>「新增域名」,补充了公网IP+端口8.xxx.xxx.xxx:10080

实际得到的配置文件就是上面的两种,导致了完全不一样的结果

其实这里就能理解为什么不能完全依靠图形化界面了,就像这种,不能说图形化界面有问题,而是我和设计这个图形化界面的开发者有完全不一样的理解。我的理解是无论我创建时设置的是什么IP+端口,在后续需要新的IP+端口时应该是添加就有效的,至少图形界面中显示了就应该有效,而开发者则是默认觉得用户在创建时一定监听了80端口,所以后续添加时即使指定了80端口,也不会再向配置文件中添加80端口了。用户和开发者的思路是不一样的,这个时候还是自己改配置文件最稳妥,说到底图形化工具只能当作方便的工具,不能完全依靠图形化界面,还是要看自己在命令行这种原始环境中能不看出问题,能发现问题才能去解决问题,图形化界面可能恰恰让用户无法发现问题。

就拿这个问题举例:

创建时填写的IP+端口为:8.xxx.xxx.xxx:10080

后续添加192.168.0.105:80后图形界面显示的状态:

PixPin_2025-08-23_10-29-11

配置文件中的状态:

PixPin_2025-08-23_10-31-33

而创建时填写192.168.0.105:80,后续添加8.xxx.xxx.xxx:10080时,图形界面中显示的状态:

PixPin_2025-08-23_10-33-30

配置文件中的状态:

PixPin_2025-08-23_10-34-02

图形化界面中我是觉得上下两种是等效的,可是实际在配置文件中完全不一样,就导致了出现两种结果。

问题复现#

重新建一个网站,还是先添加公网IP+端口,后补充内网IP+80端口,依然报nginx404,说明我排查的结果是正确的,没有问题。

1panel面板添加静态网站nginx404问题记录
https://fuwari.cbba.top/posts/1panel面板添加静态网站nginx404问题记录/
作者
Chen_Feng
发布于
2025-08-23
许可协议
CC BY-NC-SA 4.0