注意,上次我们只是简单的在同一台服务器模拟搭建了一个新的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
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提示。