Nginx反向代理
大约 3 分钟
在云服务器上搭建Nginx反向代理、结合frp进行内网穿透,并将真实IP传递给内网Nginx的过程,可以大致分为以下几个步骤:
一、准备工作
- 云服务器:确保你有一台具有公网IP的云服务器,用于部署Nginx和frp的服务端(frps)。
- 内网服务器:内网中需要有一台服务器,用于部署Nginx和frp的客户端(frpc)。
- frp软件:从frp的GitHub发布页面下载适合你的操作系统版本的frp软件。
wget https://github.com/fatedier/frp/releases/download/v0.59.0/frp_0.59.0_linux_amd64.tar.gz
tar -xf frp_0.59.0_linux_amd64.tar.gz -C /path/to/directory
- Nginx软件:在云服务器和内网服务器上分别安装Nginx。Nginx的安装方法可以参考官方文档或通过包管理器(如apt、yum等)进行安装。
wget https://nginx.org/download/nginx-1.26.2.tar.gz
tar -xf https://nginx.org/download/nginx-1.26.2.tar.gz -C /path/to/directory
cd /path/to/directory
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-http_sub_module --with-stream --with-stream_ssl_module --with-stream_ssl_preread_module --with-http_realip_module --with-openssl-opt='enable-weak-ssl-ciphers'
make && make install
groupadd www
useradd -s /sbin/nologin -g www www
ln -sf /usr/local/nginx/sbin/nginx /usr/bin/nginx
ln -sf /usr/local/nginx/conf/ /etc/nginx
vim /etc/systemd/system/nginx.service
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=false
[Install]
WantedBy=multi-user.target
- Certbot:
sudo dnf install epel-release
sudo dnf upgrade
sudo yum install snapd
sudo systemctl enable --now snapd.socket
sudo ln -s /var/lib/snapd/snap /snap
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
二、配置frp
2.1 配置frp服务端(frps)
- 解压frp:将下载的frp服务端压缩包解压到云服务器的指定目录。
- 编辑配置文件:修改
frps.ini
(或frps.toml
,取决于版本),设置必要的参数,如监听端口、管理界面端口等。
[common]
bind_port = 7000 # frp服务监听的端口
dashboard_port = 7500 # frp管理界面端口
dashboard_user = admin # 管理界面用户名
dashboard_pwd = admin # 管理界面密码
- 启动frp服务端:使用命令启动frp服务端,并确保它能在后台运行。
nohup ./frps -c frps.ini &
2.2 配置frp客户端(frpc)
- 解压frp:将下载的frp客户端压缩包解压到内网服务器的指定目录。
- 编辑配置文件:修改
frpc.ini
(或frpc.toml
),设置连接frp服务端的参数,以及需要转发的端口。
[common]
server_addr = 云服务器公网IP
server_port = 7000
[web]
type = tcp
local_ip = 127.0.0.1
local_port = 80 # 内网Nginx监听的端口
remote_port = 8080 # 公网访问的端口
- 启动frp客户端:使用命令启动frp客户端,并确保它能在后台运行。
三、配置Nginx
3.1 配置云服务器上的Nginx
- 编辑Nginx配置文件:在Nginx的配置文件中,设置反向代理,将外部请求转发到frp服务端监听的端口(这里是8080)。
server {
listen 80;
server_name XXXX;
client_max_body_size 0;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
- 重启Nginx:保存配置文件并重启Nginx服务。
- 获取证书:
sudo certbot --nginx
3.2 配置内网服务器上的Nginx
内网Nginx通常只需确保它正常监听在本地端口(如80)上,并提供相应的Web服务即可。由于请求已通过frp转发到内网,因此内网Nginx的配置相对简单。
四、测试与验证
- 访问测试:通过浏览器访问云服务器的公网IP或域名(如
http://yourdomain.com
),检查是否能成功访问到内网Nginx提供的服务。 - 查看日志:检查Nginx和frp的日志,确认请求是否被正确转发和处理。
五、注意事项
- 确保云服务器和内网服务器的防火墙设置允许相应的端口通信。
- 考虑到安全性,建议为frp管理界面设置强密码,并使用TLS加密通信。
- 如果需要传递真实IP给后端服务(如Web应用),确保Nginx配置中正确设置了
X-Real-IP
和X-Forwarded-For
头部。
通过以上步骤,你可以在云服务器上搭建Nginx反向代理,结合frp实现内网穿透,并将真实IP传递给内网Nginx。