nginx负载均衡向后台传递參数方法(后端也是nginxserver)

本文介绍如何在Nginx负载均衡器中保持SSL连接,通过设置自定义参数传递HTTPS状态到后端服务器,并在PHP环境中正确读取这些参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

做了一个站点是用nginx 做的负载均衡。后端也是多个nginxserver

遇到了一个问题。当做SSL支持时 前端nginx分发到 后端nginx后就成 http形式了(这样后台php用$_SERVER[HTTPS] == "on" 就无法推断了,但后台还必需要知道这个參数)。假设改成https的话。还需要多个证书。

所以就想让前端nginx 假设是 https 的话给后端传递一个參数。

用在后台来推断和使用。

首先前端nginx的 nginx.conf 文件里 用  proxy_set_header 设置一个參数urlprefix 值为 https(參数名最好避免使用下划线和中划线,下划线的參数会被nginx忽略掉,而中划线的參数会被nginx处理为下划线。为了避免混乱我们干脆就不用这俩个,他爱咋处理咋处理) 例如以下:

    location / {
        proxy_pass              http://myserver;
        proxy_set_header        X-Real-IP $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header        Host $http_host;
        proxy_set_header        urlprefix https;
    }

然后 后端nginx server 配置中 开启读取header 和 设置php參数

nginx.conf 文件里加入    underscores_in_headers on;

继续

设置php 參数,能够使用$_SERVER["..."]来获取的哦

 location ~ \.php$ {
        root           htmll;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;
        fastcgi_param  URL_PREFIX   $http_urlprefix;
        fastcgi_connect_timeout 300;

        include fastcgi.conf;

}

解释:

  fastcgi_param  URL_PREFIX   $http_urlprefix;(前端设置的參数名是urlprefix,这里读取的是http_urlprefix,这是由于nginx在处理參数时全部參数名前面都给加了http_ ,另外fastcgi_param  URL_PREFIX 这个參数名,在php读取时不须要加不论什么前缀。并且大写和小写敏感,一定要注意。

那么后台php 就能够用 $_SERVER['URL_PREFIX']  取出来我们前端设置的參数了。

if (isset($_SERVER['URL_PREFIX']) && $_SERVER['URL_PREFIX'] == "https"){
    //巴拉巴扒拉
}

### Nginx负载均衡配置文件编写指南 Nginx负载均衡功能主要依赖于 `upstream` 模块,该模块可以定义一组后端服务器,并通过不同的策略将请求分配给这些服务器。以下是详细的配置方法以及一个完整的示例。 #### 1. 定义 Upstream Block 在 Nginx 中,可以通过 `upstream` 块来定义一组后端服务器。每台服务器都可以指定权重、最大连接数以及其他参数[^2]。 ```nginx http { upstream backend_servers { server 127.0.0.1:8081 weight=3 max_fails=3 fail_timeout=30s; server 127.0.0.1:8082 weight=1 max_fails=3 fail_timeout=30s; } } ``` 上述配置中: - `weight` 参数用于设置服务器的权重,默认值为 1。较高的权重意味着更多的流量会被导向这台服务器。 - `max_fails` 和 `fail_timeout` 是健康检查的相关参数,分别表示失败尝试的最大次数和超时时间。 #### 2. 配置 Server Block 接下来,在 `server` 块中使用 `proxy_pass` 将请求转发至上游定义的服务组。 ```nginx server { listen 80; server_name localhost; location / { proxy_pass http://backend_servers; 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_pass` 指向之前定义的 `upstream` 名称 (`backend_servers`)。 - 设置必要的头信息以便后端能够获取客户端的真实 IP 地址和其他上下文数据。 #### 3. URL 重写与负载均衡结合 如果需要实现带 URL 重写的负载均衡,则可以在 `location` 块内加入相应的 `rewrite` 规则[^3]。 ```nginx http { upstream media_backend { server 127.0.0.1:8888; server 127.0.0.1:8889; } server { listen 80; server_name www.media.com; location /file/ { rewrite ^(/file/.*)/media/(.*)\.*$ $1/mp3/$2.mp3 last; } location / { proxy_pass http://media_backend; proxy_set_header Host $host; } } } ``` 在此例子中,当用户访问 `/file/somepath/media/filename.ext` 这样的路径时,它会被改写成 `/file/somepath/mp3/filename.mp3` 并传递后台媒体服务器处理。 #### 4. 测试并重启 Nginx 完成以上配置之后,保存修改过的 `nginx.conf` 文件,并执行以下命令测试语法正确性: ```bash sudo nginx -t ``` 如果有错误提示,就可以安全地重新加载 Nginx 配置而无需中断现有连接: ```bash sudo systemctl reload nginx ``` 此时,任何针对 `localhost` 或者所设定域名的 HTTP 请求都会被均匀分布到已声明的各个后端节点上[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值