Nginx反向代理的两种配置方式

本文介绍如何利用Nginx进行反向代理配置,包括单节点不同端口的代理及多节点间的负载均衡策略。通过示例展示了具体的配置步骤及关键参数设置。
一、nginx反向代理简单配置

1、准备nginx环境

这篇文章的前提是已经配置好了NGINX,而且tomcat已经配置好了,而且能能够访问了。
反向代理不同端口(本案例均是单节点)
这里介绍一台nginx服务器(192.168.83.130),代理两个本机的tomcat(端口分别为:192.168.83.130:8080、192.168.83.130:8081),下面是安装后情况:

1)nginx目录:
在这里插入图片描述
2)tomcat实例:
在这里插入图片描述
首先在两个tomcat的/conf/server.xml里面分别配置端口如下:
在这里插入图片描述
分别重启待用。
重启tomcat命令:

#首先,进入Tomcat下的bin目录
cd  tomcat安装目录/bin
# 使用Tomcat关闭命令
./shutdown.sh
# 查看Tomcat是否以关闭
ps -ef|grep java
# 如果显示以下相似信息,说明Tomcat还没有关闭
root 12976 1 0 Sep01 ? 00:10:22 /usr/java/jdk1.7.0_80/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.endorsed.dirs=/usr/local/tomcat/endorsed -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start 

#如果你想直接干掉Tomcat,你可以使用kill命令,直接杀死Tomcat进程
kill -9 12976
#然后继续查看Tomcat是否关闭
ps -ef|grep java
#如果出现以下信息,则表示Tomcat已经关闭
root 19955 19757 0 17:48 pts/0 00:00:00 grep java

#启动Tomcat(在bin目录下执行命令)
 ./startup.sh
#查看tomcat日志(记得切换路径哦)
tail -f catalina.out

2、nginx的具体配置
然后在nginx的/conf/nginx.conf下设置如下:
在这里插入图片描述
设置完成后重启nginx。

浏览器输入主机ip:http://192.168.83.130/,显示如下
在这里插入图片描述

二、负载均衡具体配置

1、上面一种情况是对不同端口的代理 ,也可以采用负载均衡设置(upstream)
这里对不同的ip采用的ip hash策略。

upstream server_tomcat{
        ip_hash;
        server 10.1.14.228:8080 weight=8;
        server 10.1.14.228:80   weight=2;
   }
    server {
        listen       8887;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            proxy_pass http://server_tomcat;
            proxy_set_header Host $host:$server_port;
            index  index.html index.htm;
        } 

注意 这里的proxy_set_header Host $host;一定要设置,否则无法使用upstream反向代理。报错如下(
在这里插入图片描述

upstream后的是tomcat的实例名称,必须和proxy_pass 后面的server_tomcat是同一个实例。

2、 nginx之http反向代理多台服务器(不同的ip的负载均衡)
1)conf文件设置
一个主机(192.168.83.130)代理另2台主机(192.168.83.128、192.168.83.131)上的tomcat类似,只要将 upstream里的ip换掉就行了。
注意 这里的proxy_set_header Host $host;一定要设置,否则无法使用upstream反向代理。

 upstream server_tomcat{
         ip_hash;
        server 192.168.83.131:8081 weight=2;
        server 192.168.83.128:8080 weight=8;
    }

2)参数含义

是Nginx可以基于ngx_http_upstream_module模块提供服务器分组转发、权重分配、状态监测、调度算法等高级功能。

http upstream配置参数:

upstream name
#自定义一组服务器,配置在http内;指定upstream服务器组的名称,名称中不能包含"_",否则会报错;upstream可以和server配置在一个文件中,也可以单独一个文件,但是upstream不能配置在server里面。

server address parameters;
address可以配置为IP、域名、unix套接字;
parameters参数可以配置下面几种:
                              weight=number #设置权重,默认为1。
                              max_conns=number  #给当前server设置最大活动链接数,默认为0表示没有限制。
                              max_fails=number  #对后端服务器连续监测失败多少次就标记为不可用。
                              fail_timeout=time #对后端服务器的单次监测超时时间,默认为10秒。
                              backup  #设置为备份服务器,当所有服务器不可用时将重新启用次服务器。
                              down    #标记为down状态。
                              resolve #当server定义的是主机名的时候,当A记录发生变化会自动应用新IP而不用重启Nginx。

hash KEY consistent;
#基于指定key做hash计算,使用consistent参数,将使用ketama一致性hash算法,适用于后端是Cache服务器(如varnish)时使用,consistent定义使用一致性hash运算,一致性hash基于取模运算。KEY可以设置为$request_uri,基于用户的请求的uri做hash运算。

ip_hash;
#源地址hash调度方法,基于的客户端的remote_addr(源地址)做hash计算,以实现会话保持。

least_conn;
#最少连接调度算法,优先将客户端请求调度到当前连接最少的后端服务器。

注:调度算法需要设置在upstream中;默认调度算法是轮询。

nginx之http反向代理多台服务器

三、反向代理web架构

在这里插入图片描述

### 配置 Nginx 作为反向代理 #### 什么是反向代理 反向代理是一种服务器配置方式,其中 Nginx 接收客户端请求并将它们转发到后端服务器。最终由后端服务器处理请求并将结果返回给客户端[^4]。 #### 基本配置流程 为了使 Nginx 成功充当反向代理角色,需按照以下方式进行配置: 1. **安装 Nginx** 确保已正确安装 Nginx 并运行正常。如果没有安装,可通过包管理器完成安装操作。例如在 Ubuntu 上执行命令 `sudo apt-get install nginx` 安装软件[^5]。 2. **编辑 Nginx 配置文件** 打开主要的站点配置文件,默认位于 `/etc/nginx/sites-available/default` 或者自定义位置下的 `.conf` 文件中进行修改。 3. **添加反向代理规则** 假设目标是让所有发往域名 `www.example.com` 的流量被重定向至实际提供服务的地址 `http://localhost:8080` ,那么可以在对应 server block 下加入如下内容: ```nginx server { listen 80; server_name www.example.com; location / { proxy_pass http://localhost:8080; # 后端应用的真实URL 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; } } ``` 以上代码片段设置了基本的反向代理行为,并传递必要的头部信息以保留原始请求的相关属性[^1]。 4. **测试配置语法并重新加载 Nginx** 修改完成后保存退出,接着检验新配置是否存在错误: ```bash sudo nginx -t ``` 若无误,则刷新当前活动的服务实例使之生效: ```bash sudo systemctl reload nginx ``` #### 特殊情况考虑 - **HTTPS 支持**: 若要支持 SSL/TLS 加密通信,则需要额外引入证书材料并通过 ssl 模块启用加密通道。 - **WebSockets 处理**: 对于实时通讯协议 WebSocket (WSS),还需要特别指定升级握手相关的头字段[^3]: ```nginx location /ws/ { proxy_pass http://backend_ws_server; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } ``` #### 示例综合配置 这里给出一个较为全面的例子展示如何在一个典型的 LEMP(Linux, Nginx, MySQL/MariaDB, PHP) 架构之上叠加反向代理功能: ```nginx upstream php_backend { server unix:/run/php/php7.4-fpm.sock fail_timeout=0; } server { listen 80; server_name mysite.local; root /var/www/mysite; index index.php index.html; location /api/ { rewrite ^/api/(.*)$ /$1 break; proxy_pass http://jsonplaceholder.typicode.com/; proxy_set_header Host jsonplaceholder.typicode.com; } location / { try_files $uri $uri/ =404; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass php_backend; } } ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值