注意,上次我们只是简单的在同一台服务器模拟搭建了一个新的http服务器(启用了8080端口),使用的是apache,从而模拟了多台服务器实现的Nginx反向代理,通过Nginx向上游代理服务器发送请求。

这一次对Nginx反向代理做出具体的配置,按照《Mastering Nginx》推荐

首先

sudo su        //root模式

cd /etc/nginx/

touch ./proxy.conf        //新建一个单独的代理配置

vim ./proxy.conf

如下:



#Mastering Nginx
#关闭重定向
proxy_redirect off;
#传递给上游服务器用户头信息
proxy_set_header Host $http_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 30;
#Nginx与上游服务器两次操作成功等待时间
proxy_send_timeout 15;
proxy_read_timeout 15;
#这些缓冲控制了Nginx如何快速响应用户请求
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
#控制worker进程阻塞后台数据的时间,值越大,处理阻塞时间越长
proxy_temp_file_write_size 64k;



然后

vim ./sites-available/default        //编辑默认站点配置文件



location ~ ^/apache {
        include proxy.conf;
        proxy_pass http://localhost:8080;
    }



service nginx reload         //重读nginx

 

注意:如果nginx reload提示failed,请查看/var/log/nginx/error.log错误日志!

接下来尝试把上游服务器作为uploads目录,专门存放用户上传的文件。

vim /etc/nginx/sites-available/default



include proxy.conf;
    location /uploads {
        client_max_body_size 500m;
        proxy_connect_timeout 75;
        proxy_send_timeout 90;
        proxy_read_timeout 90;
        proxy_pass http://localhost:8080;
    }

    location / {
        index  index.htm index.html index.php;  
        #如果文件不存在则尝试TP解析  
        #如果请求既不是一个文件,也不是一个目录,则执行一下重写规则
        if (!-e $request_filename)
        {
            #地址作为将参数rewrite到index.php上。
            rewrite ^/(.*)$ /index.php/$1;
        }
    }



注意把proxy.conf包含在location外部,然后内部覆盖原有的配置,否则会提示“directive is duplicate”。

 

再次访问:www.gxy.gift/uploads

Nginx转为Apache nginx转发apache_php

apache将会代理存储文件的访问

 

接下来讲解反向代理中结合try_files使用技巧:

在《Mastering Nginx》一书中提到这段代码的作用:



location / {
        try_files $uri @apache;
    }

    location @apache {
        proxy_pass http://localhost:8080;
    }



这段配置非常简单,简单说:请求发送给Nginx服务器后,按照请求的文件或者路由活取nginx的文件,从而呈现出静态页面,但是如果Nginx找不到这样的地址文件或者无法路由,就会把地址直接丢给上游的@apache

 

总结:所谓web反向代理服务,要注意代理服务器使用过程中是直接把域名后面的这一段请求,也就是$uri发送到上游服务器,在这儿是apache,相当于用户直接请求了apache服务器的效果,如果apache服务器也不能处理这段请求,那么将会显示apache的not found提示。