如何配置Nginx实现域名访问带非80端口IP且显示自定义域名?
这问题我碰到过好多次了,用Nginx反向代理就能完美解决——既不用暴露后端的IP:端口,地址栏还能一直显示你的自定义域名。下面一步步来操作:
前置准备
- 确保你的自定义域名已经通过A记录解析到运行Nginx的服务器IP(注意:这里解析的是Nginx服务器的IP,不是那个
1.2.3.4) - 已经在服务器上安装好Nginx(如果没装,用包管理器比如
apt install nginx或者yum install nginx就能搞定) - 目标服务(
1.2.3.4:84)能被Nginx服务器正常访问(可以用curl 1.2.3.4:84测试连通性)
Nginx配置步骤
- 打开Nginx的站点配置文件,通常在
/etc/nginx/sites-available/目录下,新建一个配置文件比如your-domain.conf,或者直接编辑默认的default文件。 - 添加以下配置块,替换其中的占位符:
server { listen 80; # 替换成你的自定义域名,支持带www的二级域名 server_name your-domain.com www.your-domain.com; location / { # 替换成目标服务的IP和端口 proxy_pass http://1.2.3.4:84; # 传递原始请求的Host头,让后端服务知道是哪个域名访问的 proxy_set_header Host $host; # 传递真实客户端IP给后端服务 proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 传递当前请求的协议(HTTP/HTTPS) proxy_set_header X-Forwarded-Proto $scheme; } }
- 如果是新建的配置文件,需要创建软链接到
sites-enabled目录,让Nginx加载它:
ln -s /etc/nginx/sites-available/your-domain.conf /etc/nginx/sites-enabled/
测试与生效
- 先检查Nginx配置是否有语法错误:
nginx -t
如果输出nginx: configuration file /etc/nginx/nginx.conf test is successful就说明没问题。
2. 重启Nginx让配置生效:
systemctl restart nginx
现在你访问http://your-domain.com,地址栏会一直显示你的域名,而实际请求会被Nginx悄悄转发到1.2.3.4:84,完全看不到后端的IP和端口。
额外提示(可选)
如果想启用HTTPS(现在建议网站都用HTTPS),可以用Let's Encrypt免费证书快速配置:
- 安装certbot工具:
apt install certbot python3-certbot-nginx
- 自动生成证书并配置Nginx的HTTPS转发:
certbot --nginx -d your-domain.com -d www.your-domain.com
执行完之后,certbot会自动修改你的Nginx配置,把所有HTTP请求重定向到HTTPS,同时地址栏依然保持显示你的自定义域名。
内容的提问来源于stack exchange,提问作者Eric Lima




