操作场景
本文基于Lighthouse服务器,使用nginx创建端口代理虚拟主机,将本地交换环上的端口映射到外部公网上的端口上,使得可以通过宫外IP访问本地的服务。解决社区中部分同学运行在本地端口上的服务无法通过外网访问的问题。这里使用我的前一篇教程五分钟在腾讯云lighthouse上搭建markdown协作平台,将文中搭建的Markdown协作平台暴露至公网上作为一个示例。
通过nginx端口转发,可以实现很多功能,包括本地端口转发、PHP网站部署、内网端口转发和负载均衡等能力。
操作步骤
- 首先在本机安装nginx服务器,检查本机是否安装可以使用如下命令: image.png 如果命令正常返回则是已经安装完成,若未返回则需要安装。如何安装nginx请参考文章:nginx.conf的常用配置类型和方法,这里给出常用安装命令:
# CentOS操作系统:
$ sudo yum update
$ sudo yum install nginx -y
$ sudo yum install updateCopy
# Ubuntu 和 Debian
$ sudo apt-get update
$ sudo apt-get install nginx -y
$ sudo apt-get updateCopy
2. 安装成功后,配置端口转发的虚拟主机,最简单的方法是直接修改根目录的配置文件/etc/nginx/nginx.conf
(不安全),添加一个虚拟主机,如下代码所示:
server {
listen 80;
server_name yourdomain;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header HTTP_X_FORWARDED_FOR $remote_addr;
proxy_redirect default;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
# 以上代码创建了一个在80端口监听,代理本地127.0.0.1:3000端口的端口代理服务。
# 可以通过将你的域名解析至改云服务器IP,以实现域名访问。
3. 检查nginx
是否配置成功,使用以下命令:
$ sudo nginx -t
# 如果成功则会返回以下内容
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
如下图所示:
4. 重启nginx配置,加载配置好的虚拟主机,使用如下命令:
代码语言:shell复制$ sudo systemctl restart nginx
如果需要进行更多自定义配置,请参考:nginx.conf的常用配置类型和方法
操作说明
步骤2:虚拟主机的配置方法
下面对步骤2中的一些配置参数做相关说明:
代码语言:javascript复制server { # 创建一个虚拟主机
listen 80; # 该虚拟主机在80端口监听
server_name yourdomain; # 这里配置外部访问的域名,如果没有域名则可以使用localhost,直接ip访问
location / {
# 端口转发的内部IP地址,如果是PHP应用则配置为fastcgi_pass 127.0.0.1:9000;也可以配置为内网地址。
proxy_pass http://127.0.0.1:3000;
# 配置是否向被转发的端口传递客户端的真实IP
proxy_set_header X-Real-IP $remote_addr;
# 配置是否向被转发的端口传递代理IP链路
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 配置是否向被转发的端口传递http代理IP链路
proxy_set_header HTTP_X_FORWARDED_FOR $remote_addr;
# 配置链接重定向方式,跟随端口的response
proxy_redirect default;
# 配置nginx使用的http协议版本
proxy_http_version 1.1;
# 最后两条配置是否允许使用websocket
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
步骤3:检查是否配置成功
使用nginx -t
命令可以检查nginx的配置文件是否有误,如果有误则会返回配置文件错误的位置,如下图所示:
下图显示错误发生在106行。