Nginx源安装与反向代理配置 作者: Hogwarts 发布于: 2022-03-10 更新于: 2026-02-14 分类: 默认分类 Nginx反向代理的调试弄得我真是生无可恋! 网络上一大把教程,仅仅照抄是肯定不行的。Nginx的功能十分强大,细说十天也说不完,就按需求聊了。 说一下需求吧:A是正常站,但不想IP外露。B安装Nginx反向代理A站,冲在前面。如果B被打则域名解析到A套CF。还有或许A站的443端口有程序占用,用另外的端口做站也可用B反代,不暴露A站的端口。 #一、Nginx的安装 ##官方安装教程 参考网址:`https://nginx.org/en/linux_packages.html` `https://nginx.org/en/linux_packages.html#Debian` ##1.1 以Debian11为例 ###1.1.1 安装先决条件 apt install curl gnupg2 ca-certificates lsb-release debian-archive-keyring ###1.1.2 导入官方 nginx 签名密钥,以便 apt 可以验证包的真实性。获取密钥 curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \ | tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null ###1.1.3 要为稳定的 nginx 包设置 apt 存储库,请运行以下命令(推荐) echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \ http://nginx.org/packages/debian `lsb_release -cs` nginx" \ | tee /etc/apt/sources.list.d/nginx.list ###1.1.4 设置存储库固定以更喜欢我们的包而不是分发提供的包 echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" \ | tee /etc/apt/preferences.d/99nginx ###1.1.5 要安装 nginx,请运行以下命令 apt update && apt install nginx ~~注意:root用户安装时不需输入sudo,且`| sudo tee`改为`|tee`,竖道与tee间不要有空格。~~ ##1.2 以RockyLinux为例 ###1.2.1 先决条件 yum install yum-utils ###1.2.2 设置 yum 存储库 vim /etc/yum.repos.d/nginx.repo #输入以下内容 [nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true ###1.2.3 安装命令 yum update && yum install nginx -y 安装过程有一个核对指纹的提示 Importing GPG key 0x7BD9BF62: Userid : "nginx signing key " Fingerprint: 573B FD6B 3D8F BC64 1079 A6AB ABF5 BD82 7BD9 BF62 From : https://nginx.org/keys/nginx_signing.key Is this ok [y/N]: y ##1.2.4 安装完成后测试 在浏览器中输入IP地址查看是否安装成功。 如未出现Nginx默认页,运行下列命令。 nginx -s reload 可能报错:`nginx -s reload nginx: [error] invalid PID number "" in "/var/run/nginx.pid"` 则运行: pkill -9 nginx nginx -c /etc/nginx/nginx.conf nginx -s reload ##1.3 编译安装 算了吧,太麻烦了,有空再写吧。 ##1.4 简单安装 apt update && apt upgrade -y apt install nginx -y #1.4 安装程序的区别 ###1.4.1 版本不同 目前官方安装的最新稳定版本是1.20.1。 简单安装的版本是1.18.0。 ###1.4.2 文件差别 官方安装后文件是完全的。 简单安装有可能nginx.conf和defaule.conf不存在。也可能分系统,Debian10就没有这个问题。 nginx.conf可以在网上找一个,保存在`/etc/nginx`路径中。 `include /etc/nginx/conf.d/*.conf;`这项不要加#号。 Rockylinux9源安装后默认html在 `/usr/share/nginx/html`下。 #二、反向代理的配置文件 闲言碎语不讲了直接列出配置文件了。 此文件存放在`/etc/nginx/conf.d`路径中,名称随意,但必须以`.conf`结尾。 server{ listen 80; server_name 你的域名; return 301 https://$server_name$request_uri; } server { listen 443 ssl; http2 on; server_name 你的域名; index index.php index.html index.htm; ssl_certificate /etc/ssl/fullchain.cer; #证书路径 ssl_certificate_key /etc/ssl/private.key; #密钥路径 access_log /var/log/nginxaccess.log; error_log /var/log/nginxerror.log; ssl_protocols TLSv1.2 TLSv1.3; #经测试,没有这几个ssl也能正常运行。 ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers on; ssl_early_data on; location / { proxy_pass https://你的域名:A站端口; #端口是443的话可省略,直接写域名即可。 proxy_ssl_server_name on; #这是最最重要的一项! proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } ##Nginx gRPC代理设置 server { listen 443 ssl http2; # 必须开启 http2 server_name 你的域名; # SSL 证书配置 ssl_certificate /etc/ssl/v2ray/fullchain.cer; ssl_certificate_key /etc/ssl/v2ray/private.key; # 建议的 SSL 优化参数 ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256; # gRPC 反代配置 # 路径必须匹配 config.json 中的 serviceName,格式为 /serviceName/ location /SpeedTest/ { # 必须关闭日志以防记录大量二进制流,保护隐私 access_log off; # 核心指令:使用 grpc_pass # grpc:// 表示后端是明文 gRPC (h2c) grpc_pass grpc://127.0.0.1:10000; # 针对长连接的优化参数 grpc_read_timeout 1h; grpc_send_timeout 1h; grpc_socket_keepalive on; # 即使后端出错也不返回 Nginx 默认错误页,增加隐蔽性 grpc_intercept_errors on; } # 伪装站配置:处理非 gRPC 的普通流量 location / { root /var/www/html; index index.html; } } ##Nginx全局优化 为了让 gRPC 长连接更稳定,建议在 /etc/nginx/nginx.conf 的 http 块中确保以下参数 http { # 增大 HTTP/2 的并发流限制 http2_max_concurrent_streams 1000; # 增大缓冲区,防止大切片数据被截断 client_header_buffer_size 512k; large_client_header_buffers 4 512k; } #三、修改hosts vim /etc/hosts 将A站的IP和指向B站的域名按格式填入。 A站IP以104.243.26.26为例,域名以domain.com为例。 格式为:IP 域名 #中间有空格。 示例为:104.243.26.26 domain.com #四、重启Nginx systemctl restart nginx 有问题的话看日志排除吧 systemctl status nginx tail /var/log/nginxaccess.log tail /var/log/nginxerror.log #五、我的参考 看`https://stackoverflow.com/questions/38375588/nginx-reverse-proxy-to-heroku-fails-ssl-handshake` 排除的错误。 #六、未完待续 应该还能在配置中加入缓存项,加快浏览的速度。 技术理论和配置经验不足。 ##水平有限,仅供参考。 标签: nginx, 反向代理