FRP与Nginx服务搭建
AI-摘要
SeeYou GPT
AI初始化中...
介绍自己 🙈
生成本文简介 👋
推荐相关文章 📖
前往主页 🏠
前往爱发电购买
FRP与Nginx服务搭建
西柚简介
FRP(Fast Reverse Proxy)是一款高性能的反向代理服务器,可以帮助您轻松地将本地服务发布到公网。Nginx是一款高性能的HTTP服务器,可以用于反向代理、负载均衡、动静分离等场景。
本文将介绍如何在服务器上搭建FRP和Nginx服务,并通过FRP将本地服务发布到公网。
环境准备
- 一台服务器,建议配置2核4GB内存以上
- 公网IP地址
- 域名(可选)
FRP安装
下载FRP
FRP支持Windows、Linux、MacOS等多种操作系统,您可以根据您的操作系统下载对应版本的FRP。
下载地址: https://github.com/fatedier/frp/releases
部署
- 解压下载的压缩包。
- 将 frpc 复制到内网服务所在的机器上。
- 将 frps 复制到拥有公网 IP 地址的机器上,并将它们放在任意目录。
配置FRP
FRP的配置文件为 frps.toml,默认位于 frp 目录下。
- 配置frps.toml
在 frps.toml 文件中添加以下内容,以指定 HTTP 请求的监听端口为 8080:
bindPort = 7000
vhostHTTPPort = 8080
如果需要配置 HTTPS 代理,还需要设置 vhostHTTPSPort。
2. 配置frpc.toml
在 frpc.toml文件中添加以下内容,确保设置了正确的服务器 IP 地址、本地 Web 服务监听端口和自定义域名:
serverAddr = "x.x.x.x"
serverPort = 7000
[[proxies]]
name = "web"
type = "http"
localIP = "127.0.0.1"
localPort = 8081
customDomains = ["www.yourdomain.com"]
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000
配置说明:
- bindPort: 服务端与客户端通信端口
- vhostHTTPSPort: HTTP请求监听端口
- serverAddr: FRP服务端地址(可以是IP或者是域名)
- serverPort: 服务端与客户端通信端口
- name: 服务端名称,保持唯一即可
- type: 暴露的协议类型
- localIP: 内网需要暴露服务的IP
- localPort: 内网需要暴露服务端口
- customDomains: 暴露服务的自定义域名
- remotePort: 暴露服务的公网访问IP
启动FRP服务端:
./frps -c ./frps.toml
启动FRP客户端:
./frpc -c ./frpc.toml
Nginx安装
源码安装
- 下载Nginx源码:
wget https://nginx.org/download/nginx-1.23.1.tar.gz
- 解压源码:
tar -zxvf nginx-1.23.1.tar.gz
- 编译安装:
cd nginx-1.23.1
./configure
make && make install
- 配置Nginx:
vim /etc/nginx/nginx.conf
配置文件示例:
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://127.0.0.1:8081;
}
}
配置说明:
- listen 80: 监听80端口
- server_name localhost: 服务器名称
- proxy_pass http://127.0.0.1:8081: 反向代理到内网服务
启动Nginx服务:
systemctl start nginx
在线安装
CentOS/RedHat:
yum install nginx
Debian/Ubuntu:
apt install nginx
配置Nginx:
vim /etc/nginx/nginx.conf
配置文件示例:
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://127.0.0.1:8081;
}
}
配置说明:
- listen 80: 监听80端口
- server_name localhost: 服务器名称
- proxy_pass http://127.0.0.1:8081: 反向代理到内网服务
启动Nginx服务:
systemctl start nginx
访问测试
在浏览器中输入您的域名或公网IP地址,如果能看到您的内网服务页面,则说明搭建成功。
Nginx配置文件最佳实践
- 所有的 Nginx 配置文件都在
/etc/nginx/
目录下。 - 主要的 Nginx 配置文件是
/etc/nginx/nginx.conf
。 - 为每个域名创建一个独立的配置文件,便于维护服务器。你可以按照需要定义任意多的 block 文件。
- Nginx 服务器配置文件被储存在
/etc/nginx/sites-available
目录下。在/etc/nginx/sites-enabled
目录下的配置文件都将被 Nginx 使用。 - sites-available 目录用于存储 Nginx 网站的配置文件,这些文件构成了可用的网站列表。若需启用某个网站,可使用符号链接(symlink)将其配置文件从
sites-available
链接到sites-enabled
目录中。例如,要启用 some.domain.com 网站,可以执行命令ln -s /etc/nginx/sites-available/some.domain.com /etc/nginx/sites-enabled/
。这样,Nginx 便会加载并运行该网站的配置。 - 最佳推荐是使用标准的命名方式。例如,如果你的域名是 mydomain.com,那么配置文件应该被命名为
/etc/nginx/sites-available/mydomain.com.conf
- 如果你在域名服务器配置块中有可重用的配置段,把这些配置段摘出来,做成一小段可重用的配置。
- Nginx 日志文件(access.log 和 error.log)定位在 /var/log/nginx/ 目录下。推荐为每个服务器配置块,配置一个不同的 access 和 error。
- Nginx配置文件在线生成工具:https://nginxconfig.org/?global.app.lang=zhCN
- 你可以将你的网站根目录设置在任何你想要的地方。最常用的网站根目录位置包括:
/home/<user_name>/<site_name>
/var/www/<site_name>
/var/www/html/<site_name>
/opt/<site_name>
总结
本文介绍了如何在服务器上搭建FRP和Nginx服务,并通过FRP将本地服务发布到公网。您可以根据您的需要进行配置和使用。
注意:
- 为了保证安全,请您在公网IP地址上配置防火墙,只开放必要的端口。
- 请您定期更新FRP和Nginx软件版本,以修复已知的安全漏洞。
- 本文仅介绍了基本的配置方式,但FRP和Nginx都提供了丰富的个性化配置选项,建议进行高级配置。对于更高级的配置,参考FRP官方文档和Nginx在线配置工具
- 在Nginx和FRP的联合配置中,如果Nginx和FRP在同一台服务器上,建议使用hosts文件将FRP内网服务的自定义域名解析为127.0.0.1,以减少防火墙端口暴露,提高安全性
常见问题
- 如何使用FRP将多个内网服务发布到公网?
您可以通过在frpc配置文件中添加多个 proxies 段来实现。
示例:
serverAddr = "x.x.x.x"
serverPort = 7000
[[proxies]]
name = "web"
type = "http"
localPort = 80
localIP = "172.17.0.1"
customDomains = ["www.yourdomain.com"]
[[proxies]]
name = "web2"
type = "http"
localPort = 8080
localIP = "127.0.0.1"
customDomains = ["www.yourdomain2.com"]
- 如何使用Nginx进行负载均衡?
您可以通过在Nginx配置文件中添加多个 server 段来实现。
示例:
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://127.0.0.1:8080;
}
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://127.0.0.1:8081;
}
}
- 如何使用Nginx进行动静分离?
您可以通过在Nginx配置文件中设置 location 来实现。
示例:
server {
listen 80;
server_name localhost;
location /static {
root /usr/share/nginx/html/static;
}
location / {
proxy_pass http://127.0.0.1:8080;
}
}
- 如何使用FRP进行HTTPS反向代理?
您可以通过在FRP服务端配置文件中填写vhostHTTPSPort = 443 客户端填写以下配置
示例:
serverAddr = "x.x.x.x"
serverPort = 7000
[[proxies]]
name = "test_htts2http"
type = "https"
customDomains = ["test.yourdomain.com"]
[proxies.plugin]
type = "https2http"
localAddr = "127.0.0.1:80" #本地服务地址
# HTTPS 证书相关的配置
crtPath = "./server.crt"
keyPath = "./server.key"
hostHeaderRewrite = "127.0.0.1"
requestHeaders.set.x-from-where = "frp"
- 如何使用Nginx进行HTTPS反向代理?
您可以通过在Nginx配置文件中设置 ssl 字段来实现。
示例:
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://127.0.0.1:8080;
}
}
server {
listen 443 ssl;
server_name localhost;
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDHE-RSA-AES128-GCM-SHA256:kEDHE-ECDSA-AES128-GCM-SHA256:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4:!ECDHE-RSA-DES-CBC3-SHA:!ECDHE-ECDSA-DES-CBC3-SHA:!DHE-RSA-DES-CBC3-SHA:!DHE-DSS-DES-CBC3-SHA:!SEED:!IDEA;
ssl_session_cache builtin:10000;
ssl_session_timeout 10m;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_ssl_server_name on;
proxy_pass http://127.0.0.1:8080;
}
}
参考资料
- FRP官方文档[1]: https://gofrp.org/zh-cn/
- Nginx官方文档: https://nginx.org/en/docs/
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果