游客发表

nginx如何让网站通过域名加端口访问

发帖时间:2026-10-17 04:36:53

域名加端口访问,让网说白了就是站通让 Nginx 监听一个非 80 的端口,然后把域名指向这台服务器。过域听起来简单,名加但实际配的端口时候,坑比想象中多。访问

我见过太多人卡在"域名解析对了,让网Nginx 也启动了,站通浏览器就是过域打不开"这一步。问题往往不在 Nginx 本身,名加而是端口防火墙或者云服务商的安全组没放行那个端口。

先搞清楚请求到底怎么走的访问

用户在浏览器输入 http://example.com:8080,DNS 把 example.com 解析到你的让网服务器 IP,浏览器向这个 IP 的站通 8080 端口发起 TCP 连接。Nginx 如果监听了 8080,过域连接建立,HTTP 请求发过去,Nginx 根据 server_name 匹配到对应的 server 块,返回内容。

整条链路里,任何一环断了都访问不了。DNS 没生效、端口没监听、防火墙没放行、server_name 写错——每个环节我都踩过。

Nginx 配置怎么写

假设你的域名是 demo.example.com,想让用户通过 demo.example.com:8080 访问,Nginx 配置大概长这样:

server {  listen 8080; server_name demo.example.com; root /var/www/demo; index index.html; location / {  try_files $uri $uri/ =404; } }

几个关键点。listen 8080 告诉 Nginx 监听 8080 端口,没写 IP 就默认监听所有网卡。server_name 必须和用户访问的域名一致,否则 Nginx 可能匹配到默认 server 块,返回一个你根本没预期的页面。这个默认 server 的行为取决于你的配置文件里有没有设 default_server,以及哪个 server 块排在前面。

我自己的习惯是显式写 listen 8080 default_server; 或者反过来,给默认块加个明确的标记,免得以后加了新域名搞混。

防火墙才是真正的拦路虎

Nginx 配好了,nginx -t 也没报错,systemctl reload nginx 也执行了。本机 curl localhost:8080 能返回内容。但外网就是连不上。

十有八九是防火墙。CentOS 7 以上默认用 firewalld,Ubuntu 常用 ufw。你得手动放行:

# firewalld firewall-cmd --permanent --add-port=8080/tcp firewall-cmd --reload # ufw ufw allow 8080/tcp

如果你用的是阿里云、腾讯云、AWS 这些,还有一层安全组。控制台里找到对应实例的安全组规则,添加入方向 TCP 8080。这一步经常被忽略,因为本机测试一切正常,一到外网就超时。

怎么判断是防火墙问题?telnet 你的IP 8080 如果一直卡在连接中然后超时,基本就是被拦了。如果秒拒绝,那可能是 Nginx 没监听或者监听地址不对。

server_name 匹配的细节

Nginx 收到请求后,会拿 HTTP 头里的 Host 字段去和各个 server 块的 server_name 比对。用户访问 demo.example.com:8080,Host 头是 demo.example.com:8080——注意,带端口。Nginx 会去掉端口部分再匹配。

但如果你在 server_name 里写了 demo.example.com:8080,那反而匹配不上。只写域名就行。

还有一种情况:用户用 IP 直接访问 http://1.2.3.4:8080,Host 头就是 IP。这时候如果没有任何 server 块的 server_name 匹配这个 IP,Nginx 会用默认 server 来处理。你可以在默认 server 里返回 444 直接断开连接,避免暴露不该暴露的内容。

要不要上 HTTPS

域名加端口访问,如果是内部测试或者临时用,HTTP 就够了。但如果对外提供服务,浏览器地址栏那个"不安全"标记挺劝退的。给非标准端口配 HTTPS 也没问题,Let's Encrypt 的 certbot 照样能用,只是验证方式可能得选 DNS 验证,因为 HTTP 验证默认走 80 端口。

配好之后就是 https://demo.example.com:8443 这种形式。证书和 443 端口的配置完全一样,改个 listen 端口的事。

实际用下来,域名加端口这套方案最适合的场景是:一台服务器跑多个 Web 服务,80 和 443 已经被主站占了,其他服务用不同端口区分。简单直接,不用折腾反向代理的路径规则。

    热门排行

    友情链接