# Why Nginx ? ## 前言: 这两天不停弄frp反向代理和nginx反向代理,颇有体会,决定写一篇nginx的介绍和入门文章 ### 下面是一段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; # 把真实域名带给后端服务 } } ``` ### http和https的区别,和nginx有什么联系 #### http:明文传输,信息极其容易被盗取 #### https:暗文传输,数据安全,可信度高 #### nginx:用来掌管http和https,根据域名分发到不同内网端口,同时也能解密和加密https 由此观之,nginx在域名反代,保护数据隐私,服务安全当中起着巨大的作用,以下从5点说明为什么要用nginx ## 为什么要用 Nginx 做反向代理?(核心 5 点) ### 1. 统一霸占 80/443 端口,多域名共用 一台服务器只有一个 80、一个 443。 - Nginx 独占这两个端口 - 靠 域名 把流量分给不同内网服务: blog.yxjxxr.site → 127.0.0.1:8081 - copyparty.yxjxxr.site → 127.0.0.1:3923 - 其他服务不用暴露公网端口,更安全 ### 2. 统一管理 HTTPS 证书 - 所有域名的 SSL 证书全在 Nginx 配置 - 后端服务不用配置任何 HTTPS,只管跑裸 HTTP - Certbot 一键申请、自动续期,统一管控 ### 3. 隐藏后端真实端口和架构 外网用户只看到域名,看不到你服务器开了哪些端口、跑了啥程序。 相当于前面挡了一道门,后端全藏在内网。 ### 4. 高性能、高并发、稳定不崩 Nginx 是事件驱动模型,上万并发都扛得住,占用资源极低。 挂个博客、网盘、小服务,常年不崩、不用重启。 ### 5. 自带超强附加功能 - 强制 HTTP 跳 HTTPS - 限速、防盗链、缓存、静态文件加速 - 负载均衡(多台服务器分发流量) - 访问黑白名单、IP 封禁、防爬虫 | 特性 | Nginx | Caddy | Traefik | 宝塔面板 | |------|-------|-------|---------|----------| | 性能并发 | 极强 | 强 | 强 | 一般 | | 内存占用 | 极低 | 低 | 中等 | 高 | | 配置方式 | 手动写配置文件 | 极简配置、自动 HTTPS | 自动识别容器、不用手写 | 网页可视化 | | HTTPS 证书 | 需手动 Certbot | 全自动申请续期 | 全自动 | 内置一键 SSL | | 多域名管理 | 完美支持 | 完美支持 | 容器环境最强 | 适合新手 | | 自由度 | 定制极高,能写复杂规则 | 中等 | 高 | 低,被面板锁死 | | 适合场景 | 服务器运维、自建服务、长期稳定跑 | 极简懒人单服务 | Docker 集群、微服务 | 纯新手建站 | | 缺点 | 需要懂一点配置语法 | 小众教程少 | 学习成本高 | 臃肿、冗余、绑架环境 | ## 下面为具体的实操步骤 ### 1. 安装nginx ```bash # CentOS/RHEL sudo yum install nginx -y # Ubuntu/Debian sudo apt update sudo apt install nginx -y ``` 如果报错,可看这篇[[系统安全配置]] ### 2. 编辑文件写配置 ```bash sudo vi /etc/nginx/conf.d/copyparty.conf ``` # 写下面配置代码 ```nginx 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; } } ``` ### 3. 检查并重启 ```bash sudo nginx -t sudo systemctl restart nginx ``` 如果发现你要反代的80端口和你之前弄的web应用冲突了,看这个[[解决nginx反代80端口冲突问题]] ### 4. 放行端口和开放防火墙,同时记得在阿里云/腾讯云放行80端口 开放防火墙指令看[[云服务器服务设置外网访问]] ```bash # firewalld sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --reload # ufw sudo ufw allow 'Nginx HTTP' ``` ### 5. 验证 http://copyparty.yxjxxr.site ### 6. 配置https #### 1. 安装Certbot ```bash # 安装Certbot sudo yum install certbot python3-certbot-nginx ``` #### 2. 一键获取证书并配置Nginx(记得改域名) ```bash sudo certbot --nginx -d copyparty.yxjxxr.site ``` #### 3. 按照提示输入邮箱,然后一路yes. Certbot会自动帮你配置好nginx配置文件 ```bash # 查看写好的nginx配置文件 cat /etc/nginx/conf.d/copyparty.conf ``` #### 4. 验证 ```bash sudo nginx -t && sudo systemctl restart nginx # -t -> test,检查配置文件对不对 ``` #### 5. 放行443端口 ```bash # 放行HTTPS端口 sudo firewall-cmd --permanent --add-service=https # 重新加载防火墙 sudo firewall-cmd --reload # 查看已放行端口 sudo firewall-cmd --list-all ``` ### 查看nginx配置文件目录下的文件 ```bash ls /etc/nginx/conf.d/ ``` 如果以后有新的服务要写,那就按照上面的步骤重来一遍就行,只需要改新的配置文件名和里面的端口号就好了,配置 HTTPS 时,只需要把命令里的域名换成自己的,执行一遍即可自动配置生效,一点都不麻烦! ### 简单来说,Nginx 就是云服务器的统一入口网关,独占 80/443 端口,通过域名分流到各个本地内网服务,统一管理 HTTPS 证书、隐藏后端服务端口、高性能稳定运行,是自建站点、多域名部署必备的神器,掌握一套模板即可无限复用。