一. 介绍

反向代理是Ngxin非常重要的一项功能,那么什么是反向代理呢?以及我们什么时候会用到反向代理?

  • 反向代理:外部客户端通过网关访问网关所在内部网络中服务器上的内容,此时网关起到了反向代理的作用,
  • 我们平常通过浏览器访问远程Web服务器基本都是通过反向代理访问内容的。
    Nginx的反向代理功能可以通过在配置文件中设置proxy_pass指令帮助我们完成。

二. 准备工作

在配置nginx之前,我们先在本地启动一个应用程序,然后确保能正常访问到服务 http://127.0.0.1:8080/
Nginx反向代理配置

三. nginx.conf 配置

为了简洁,我这里只列出核心配置,需要完整配置的可以参考我的上一篇文章Nginx核心配置讲解与实践

http {
    # 设定mime类型,类型由mime.type文件定义
    include    mime.types;
    default_type  application/octet-stream;

    # 设定虚拟主机配置
    server {
        # 侦听80端口
        listen    80;
        # 定义使用什么虚拟主机地址访问,可以填写多个值,使用空格分开,支持通配符和正则
        server_name  localhost;

        # 定义服务器的默认网站根目录位置,支持相对路径和绝对路径,此处html为相对路径,等同于${NGINX_HOME}/html
        root html;
        # 定义首页索引文件的名称
        index index.php index.html index.htm;

        # 设定本虚拟主机的访问日志
        access_log  logs/nginx.access.log  main;
        error_log   logs/quancha.error.log;

        # 默认请求
        location / {

            # 请求转发到目标服务地址
            proxy_pass  http://127.0.0.1:8080/;
            
            # 以下是一些反向代理的配置参数,可删除
            proxy_redirect off;

            #后端的Web服务器可以通过X-Forwarded-For获取用户真实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;
            
            #允许客户端请求的最大单文件字节数
            client_max_body_size 10m; 
 
            #缓冲区代理缓冲用户端请求的最大字节数,
            client_body_buffer_size 128k;
 
            #nginx跟后端服务器连接超时时间(代理连接超时)
            proxy_connect_timeout 90;
 
            #连接成功后,后端服务器响应时间(代理接收超时)
            proxy_read_timeout 90;
 
            #设置代理服务器(nginx)保存用户头信息的缓冲区大小
            proxy_buffer_size 4k;
 
            #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
            proxy_buffers 4 32k;
 
            #高负荷下缓冲大小(proxy_buffers * 2)
            proxy_busy_buffers_size 64k; 
 
            #设定缓存文件夹大小,大于这个值,将从upstream服务器传
            proxy_temp_file_write_size 64k;    
 
        }
        
        # 配置静态资源,${APP_HOME}为应用程序根目录
        location /static {
            alias    ${APP_HOME}/static;
        }

    }
}

访问localhost
Nginx反向代理配置

四. 自定义vhosts

在上面的步骤中,我们是直接将配置写入nginx.conf文件,但是在实际工作中,我们建议能自己建立vhost文件。

  • 前面是通过IP地址访问,下面我们改为使用域名访问;域名需要事先指向我们Nginx服务器,我们可以通过在hosts文件中添加映射记录实现域名和IP地址的映射:

    • hosts文件路径
      • Windows:C:\Windows\System32\drivers\etc\hosts
      • Linux:/etc/hosts
    • 添加hosts记录
      127.0.0.1 www.abc.com
  • 首先我们现在nginx.conf同目录下新建一个文件夹vhosts(当然您也可以不建立,后续的include引入路径差异而已)

  • 在vhosts目录下创建一个www.abc.com.conf文件,文件名可自由定义,一般我会用域名作为文件名;文件内容如下:

# 设定虚拟主机配置
server {
    # 侦听80端口
    listen    80;
    # 这里我改为使用域名访问,注意:域名需要指向当前Nginx服务器
    server_name  www.abc.com;

    # 定义服务器的默认网站根目录位置,支持相对路径和绝对路径,此处html为相对路径,等同于${NGINX_HOME}/html
    root html;
    # 定义首页索引文件的名称
    index index.php index.html index.htm;

    # 设定本虚拟主机的访问日志
    access_log  logs/nginx.access.log  main;
    error_log   logs/quancha.error.log;

    # 默认请求
    location / {

        # 请求转发到目标服务地址
        proxy_pass  http://127.0.0.1:8080/;
        
        # 这里省略其它反向代理配置项...
    }
    
    # 配置静态资源,${APP_HOME}为应用程序根目录
    location /static {
        alias    ${APP_HOME}/static;
    }

}

再来使用http://www.abc.com/访问下
Nginx反向代理配置

相关文章: