nginx 反向代理

前言

前面的理论知识点已经写下,下面介绍实践。

正文

宝塔分析

介绍反向代理,我先介绍看下我的思路。

先给介绍一下宝塔的代理。

宝塔默认配置了:

nginx 反向代理

这个是正向代理。

至于nginx如何配置php,在此我就不介绍了。

那么来看下我配置的反向代理,看下里面的不同。

宝塔下面的配置有这么一段话:

include /www/server/panel/vhost/nginx/*.conf;

其实我们正规配置的时候就是会将conf这种东西分离开来。

好的,那么我们找到目录。

我用我在改目录下配置的一个文件示例:

nginx 反向代理

上面是什么意思呢?是监听80端口,且访问域名为我的子域名,那么就进入该配置。

看下该配置的反向代理是什么。

nginx 反向代理

那么该反向代理又在其他的文件里面,我们继续找到。

#PROXY-START/
location /
{
    expires 12h;
    if ($request_uri ~* "(php|jsp|cgi|asp|aspx)")
    {
         expires 0;
    }
    proxy_pass http://127.0.0.1:12000;
    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 REMOTE-HOST $remote_addr;
    
    #持久化连接相关配置
    #proxy_connect_timeout 30s;
    #proxy_read_timeout 86400s;
    #proxy_send_timeout 30s;
    #proxy_http_version 1.1;
    #proxy_set_header Upgrade $http_upgrade;
    #proxy_set_header Connection "upgrade";
    add_header X-Cache $upstream_cache_status;
    
    #Set Nginx Cache
    
    	add_header Cache-Control no-cache;
}
#PROXY-END/

上面是我代理的配置。

proxy_pass http://127.0.0.1:12000;

将代理请求转到12000,这里。

也就是本来我们访问80的,但是呢,最后转移到了12000端口。

这就是反向代理。

tomcat反向代理分析

tomcat 你需要配置两个tomcat,tomcat在此就不介绍了。

我配置了两个端口,一个是8081,8080。

那么我要做的就是反向代理到他们的位置。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    我是a
</body>
</html>

我有两个个html,一个是上面的a.html,一个是"我是b",文件名是b.html,我分别放到两个tomcat上去。

那么我要实现的就是通过9090端口,访问到他们两个。

下面是我的配置:

server{
   listen 9080;
   server_name www.9080.com;
   index index.html index.htm index.php;
   location ~ /a/
   {
	 proxy_pass http://127.0.0.1:8081;
   }
   location ~ /b/
   {
   proxy_pass http://127.0.0.1:8080;
   }
}

分别将9080端口转发到不同位置。
介绍一下:
server_name www.9080.com 表示域名。

注:

因为这个域名不是我的,但是我可以本地通过dns转发。

如果带a的那么就配置到http://127.0.0.1:8080,另个一个同理。

来看下效果:
nginx 反向代理

nginx 反向代理

最后来看一下:

location ~ /b/

~ /b/ 是正则表达。

当然还有其他的:

如:

= 严格匹配。如果这个查询匹配,那么将停止搜索并立即处理此请求。

~ 为区分大小写匹配(可用正则表达式)

!~为区分大小写不匹配

~* 为不区分大小写匹配(可用正则表达式)

!~*为不区分大小写不匹配

^~ 如果把这个前缀用于一个常规字符串,那么告诉nginx 如果路径匹配那么不测试正则表达式。