使用Nginx搭建反向代理


文章目录

  • 使用Nginx搭建反向代理
  • 一、什么叫反向代理
  • 二、搭建代理服务器的示例
  • 2.1 修改上游服务的Nginx配置,只让本机能够访问
  • 2.2 搭建另外一个Nginx, 使用OpenResty
  • 2.3 简单修改配置文件后运行nginx
  • 2.4 将openResty当作反向代理服务器,在它的配置文件中配置上游服务
  • 三、配置缓存服务器


一、什么叫反向代理

比如,用Nginx作为静态资源服务器,搭建一个WEB服务,那么这个静态资源的WEB就称为“上游服务”。现在要搭建另外一一个Nginx,来访问“上游服务”,这个过程就叫反向代理。

这样做要达成的效果:通过代理,将请求转发给多个上游服务处理,实现负载均衡、容灾(某一个上游服务出问题,转交给另一个处理)。

二、搭建代理服务器的示例

2.1 修改上游服务的Nginx配置,只让本机能够访问

一般上游服务是不对公网访问的

server {
        #listen       8088;
        # 加上一个本地ip,表示只有本机能访问8088端口
        listen       127.0.0.1:8088;
 ......

为了防止之前的ip仍然能访问,先将nginx停掉,再启动:

./sbin/nginx -s stop
./sbin/nginx

2.2 搭建另外一个Nginx, 使用OpenResty

下载并 编译openResty:

./configure \
--with-cc-opt="-I/usr/local/opt/openssl/include/ -I/usr/local/opt/pcre/include/" \
--with-ld-opt="-L/usr/local/opt/openssl/lib/ -L/usr/local/opt/pcre/lib/" \
-j8
make
make install

安装完成之后,运行的目录位于:

/usr/local/openresty/nginx/sbin/

2.3 简单修改配置文件后运行nginx

将端口修改为8089后访问

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9tygafEp-1589469945409)(photos/04初次访问openresty.png)]

2.4 将openResty当作反向代理服务器,在它的配置文件中配置上游服务

# 添加一个上游服务
    upstream local {
        server 127.0.0.1:8088;
    }


    server {
        listen       8089;
        server_name  localhost;
        ......
        location / {
            # 将客户的ip发给上游服务,否则上游服务拿到的ip是反向代理的ip
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            
            #root   html;
            #index  index.html index.htm; 
            # 对所有的请求, 代理到上游服务
            proxy_pass http://local;
        }
        ......

然后重启openResty: sudo ./sbin/nginx -s reload

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JmfXUacn-1589469945411)(photos/05将openresty当作反向代理.png)]

三、配置缓存服务器

http{
    # 配置缓存文件存放的目录
    proxy_cache_path /tmp/nginxcache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
    ......
    server{
        ......
            location / {
            # 将客户的ip发给上游服务,否则上游服务拿到的ip是反向代理的ip
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            #root   html;
            #index  index.html index.htm;

            proxy_cache my_cache;
            proxy_cache_key $host$uri$is_args$args;
            proxy_cache_valid 200 304 302 1d;
            # 对所有的请求, 代理到上游服务
            proxy_pass http://local;
        }
        .......
    }
}

访问两次反向代理服务器之后,将上游服务停掉./sbin/nginx -s stop

再次访问反向代理,仍然能够放到到请求。