nginx与frp内网穿透同时使用80端口

        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端口,无需在域名后追加端口号访问。

0 目录

1 准备工作

1 系统

2  必需组件

2 nginx的安装

1 安装过程

2 可能遇到的问题

3 frp的安装

1 安装过程

2 配置过程


1 准备工作

1 系统

        ubuntu16.04(已测),ubuntu18.04,ubuntu20.04(已测)

        *其它系统版本略有差异,但差异不大,操作步骤请按实际情况修改。

2  必需组件

        操作过程中会用到: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


2 nginx的安装

1 安装过程[1]

#必须更新资源列表,才能获得最新的版本
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

2 可能遇到的问题

        在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

3 frp的安装

1 安装过程

        使用 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

2 配置过程

        此时,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与frp内网穿透同时使用80端口_第1张图片

         配置完成后,重新加载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

你可能感兴趣的:(vps,nginx,运维,linux)