nginx与frp内网穿透会同时使用80端口,如果修改其中某一个服务的端口,那么用域名访问时就必须加上端口号。该文介绍一种方法,能够让nginx与frp同时使用80端口,它的原理是修改frp端口为非80端口,并使用nginx代理该端口。
举例:在域名 www.abc.com 与 www.def.com 解析到同一ip地址的情况下,想要通过访问 www.abc.com 连接到nginx服务,访问 www.def.com 连接到frp服务。这样就能够将nginx和frp安装在同一台机器上,并且共用80端口,无需在域名后追加端口号访问。
1 准备工作
1 系统
2 必需组件
2 nginx的安装
1 安装过程
2 可能遇到的问题
3 frp的安装
1 安装过程
2 配置过程
ubuntu16.04(已测),ubuntu18.04,ubuntu20.04(已测)
*其它系统版本略有差异,但差异不大,操作步骤请按实际情况修改。
操作过程中会用到:wget(下载文件用), tar(解压缩), nano(文本编辑器,vi/vim也可)。如果已有这些组件,可跳过该步骤。
sudo apt-get update
#安装wget
sudo apt-get install wget
#安装tar
sudo apt-get install tar
#安装nano
sudo apt-get install nano
#必须更新资源列表,才能获得最新的版本
sudo apt-get update
#安装nginx
sudo apt-get install nginx
#验证是否安装成功
nginx -V
#启动nginx服务
service nginx start
此时访问服务器域名,若出现nginx的欢迎界面,说明安装成功。
nginx安装完成后的文件路径:
主程序 /usr/sbin/nginx
配置文件目录 /etc/nginx
静态文件目录 /usr/share/nginx
日志目录 /var/log/nginx
在ubuntu系统中(其它系统未测),会遇到修改静态文件 index.html 但无效的情况。无论怎么修改,都一直显示nginx的欢迎页面。这是因为nginx的默认配置中,静态页面文件指向了/var/www/html,所以修改 /usr/share/nginx 下的文件不会生效,我们只需将其路径改为 /usr/share/nginx 即可。
1 编辑default文件
sudo nano /etc/nginx/sites-available/default
找到 root /var/www/html; 并将其替换为 root /usr/share/nginx/html;
2 重新加载nginx使配置生效
nginx -s reload
使用 wget 通过链接下载frp, 在这里可以找到最新版本的frp链接。
#为方便演示,本文将frp安装在/root目录下
cd /root
#下载frp
wget https://github.com/fatedier/frp/releases/download/v0.38.0/frp_0.38.0_linux_amd64.tar.gz
#解压
tar -xvf frp_0.38.0_linux_amd64.tar.gz
#进入目录
cd frp_0.38.0_linux_amd64
#修改配置文件
sudo nano frps.ini
请注意,此时应该先修改配置文件再启动。因为nginx已经占用了80端口,如果直接启动frp,会出现错误。我们应该首先将frp改为非80端口(本文中改为81)。
#以下为 frps.ini 修改后的内容,注意http的端口已经修改为非80端口
[common]
bind_port = 7000
vhost_http_port = 81
vhost_https_port = 444
token=abcdefg
配置文件修改完成后,以静默方式启动frp。
#静默方式启动frp(请在frp目录下执行该段代码,否则会报错)
nohup ./frps -c ./frps.ini &
每次都以这种方式启动比较麻烦,我们可以用systemd的方式管理。
touch /lib/systemd/system/frps.service
nano /lib/systemd/system/frps.service
打开编辑界面后,将以下模板按照自己情况改写并粘贴保存。
[Unit]
Description=frps daemon
After=syslog.target network.target
Wants=network.target
[Service]
Type=simple
ExecStart=/home/frp/frps -c /home/frp/frps.ini
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill $MAINPID
Restart=always
RestartSec=1min
[Install]
WantedBy=multi-user.target
保存以后,就可以通过systemctl命令来控制frps进程了。
#允许frps自启动
systemctl enable frps
#启动frps
systemctl start frps
#重启frps(修改完配置文件可以用这条快速启动)
systemctl restart frps
#停止frps
systemctl stop frps
此时,nginx监听80端口,frp监听81端口,我们还需要配置nginx,将对frp的请求转发到81端口。
sudo nano /etc/nginx/nginx.conf
在http的末尾加入如下配置:
server {
listen 80;
server_name *.def.com *.deff.com *.defff.com; #如有多个域名,用空格隔开
location / {
proxy_pass http://127.0.0.1:81; #将server_name的请求转发到81端口
proxy_redirect http://$host/ http://$http_host/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
}
}
配置结果如图:
配置完成后,重新加载nginx使配置生效。
nginx -s reload
此时,访问 www.def.com,即可显示frp页面;访问www.abc.com,显示nginx页面。
1. 在静默运行frp时,应该在frp目录下执行运行命令。
2. centos系统默认开启防火墙,会造成某些端口不可用。
3. 修改frp配置文件后,需要重新启动程序才能生效。
重新启动frp方法:
#查看frps的进程号
ps -e | grep frps
#根据进程号结束进程
kill 13013
#再次运行frps(在frp目录下运行)
nohup ./frps -c ./frps.ini &
[1] ubuntu安装nginx_小雪的博客-CSDN博客_ubuntu安装nginx