这两天不停弄frp反向代理和nginx反向代理,颇有体会,决定写一篇nginx的介绍和入门文章
server { listen 80; # 监听80端口 server_name copyparty.yxjxxr.site; # 网站的域名是这个 location / { # 匹配所有请求(不管访问首页还是子页面,都走这里) proxy_pass http://127.0.0.1:3923; # 将用户的请求转发到本机这个端口 proxy_set_header X-Forwarded-Proto $scheme; # 告诉后端:用户是 HTTP 还是 HTTPS 访问 proxy_set_header X-Real-IP $remote_addr; # 把用户真实 IP带给后端 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 传递用户真实 IP proxy_set_header Host $host; # 把真实域名带给后端服务 } }
由此观之,nginx在域名反代,保护数据隐私,服务安全当中起着巨大的作用,以下从5点说明为什么要用nginx
一台服务器只有一个 80、一个 443。
Nginx 独占这两个端口
靠 域名 把流量分给不同内网服务:
其他服务不用暴露公网端口,更安全
外网用户只看到域名,看不到你服务器开了哪些端口、跑了啥程序。
相当于前面挡了一道门,后端全藏在内网。
Nginx 是事件驱动模型,上万并发都扛得住,占用资源极低。
挂个博客、网盘、小服务,常年不崩、不用重启。
| 特性 | Nginx | Caddy | Traefik | 宝塔面板 |
|---|---|---|---|---|
| 性能并发 | 极强 | 强 | 强 | 一般 |
| 内存占用 | 极低 | 低 | 中等 | 高 |
| 配置方式 | 手动写配置文件 | 极简配置、自动 HTTPS | 自动识别容器、不用手写 | 网页可视化 |
| HTTPS 证书 | 需手动 Certbot | 全自动申请续期 | 全自动 | 内置一键 SSL |
| 多域名管理 | 完美支持 | 完美支持 | 容器环境最强 | 适合新手 |
| 自由度定制 | 极高,能写复杂规则 | 中等 | 高 | 低,被面板锁死 |
| 适合场景 | 服务器运维、自建服务、长期稳定跑 | 极简懒人单服务 | Docker 集群、微服务 | 纯新手建站 |
| 缺点 | 需要懂一点配置语法 | 小众教程少 | 学习成本高 | 臃肿、冗余、绑架环境 |
# CentOS/RHEL sudo yum install nginx -y # Ubuntu/Debian sudo apt update sudo apt install nginx -y
如果报错,可看这篇[[系统安全配置]]
sudo vi /etc/nginx/conf.d/copyparty.conf # 写下面配置代码 server { listen 80; server_name copyparty.yxjxxr.site; location / { proxy_pass http://127.0.0.1:3923; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; } }
sudo nginx -t sudo systemctl restart nginx
如果发现你要反代的80端口和你之前弄的web应用冲突了,看这个[[解决nginx反代80端口冲突问题]]
开放防火墙指令看[[云服务器服务设置外网访问]]
# firewalld sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --reload # ufw sudo ufw allow 'Nginx HTTP'
http://copyparty.yxjxxr.site
# 安装Certbot sudo yum install certbot python3-certbot-nginx
sudo certbot --nginx -d copyparty.yxjxxr.site
# 查看写好的nginx配置文件 cat /etc/nginx/conf.d/copyparty.conf
sudo nginx -t && sudo systemctl restart nginx # -t -> test,检查配置文件对不对
# 放行HTTPS端口 sudo firewall-cmd --permanent --add-service=https # 重新加载防火墙 sudo firewall-cmd --reload # 查看已放行端口 sudo firewall-cmd --list-all
ls /etc/nginx/conf.d/
如果以后有新的服务要写,那就按照上面的步骤重来一遍就行,只需要改新的配置文件名和里面的端口号就好了,配置 HTTPS 时,只需要把命令里的域名换成自己的,执行一遍即可自动配置生效,一点都不麻烦!
本文作者:Deshill
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!