Nginx配置反向代理很简单,只需在nginx.conf配置文件的server区块启用proxy_pass相关参数配置。
这里给出一段简单的配置代码:listen 80;
server_name www.
location / {
proxy_pass http://1.2.3.4; //后端ip地址
proxy_redirect off; //关闭后端返回的header修改
proxy_set_header Host $host; //修改发送到后端的header的host
proxy_set_header X-Real-IP $remote_addr; //设置真实ip
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
您可能感兴趣的文章:
Nginx负载均衡与反向代理的例子(图文)
Nginx Proxy 代理配置图片缓存的实例参考
nginx正向代理配置简单一例
nginx反向代理配置简单示例
学习Nginx反向代理实现简单负载均衡(图文)
nginx缓存html静态文件 解析php及反向代理IIS的配置
nginx中配置proxy正向代理
Nginx实现简单的反向代理
nginx创建反向代理和虚拟主机的例子
nginx的反向代理配置与优化
nginx反向代理与varnish缓存配置
nginx反向代理与负载均衡
Nginx 反向代理的小例子
nginx反向代理与缓存详解
nginx反向代理配置一例
Nginx反向代理Nginx
Nginx反向代理及负载均衡配置
nginx反向代理配置和优化
Nginx Proxy代理和图片缓存配置
两个虚拟主机,纯静态:
index index.html;
server {
server_name www.domain1.com;
access_log logs/domain1.access.log main;
root /var/www/domain1.com/htdocs;
}
server {
server_name www.domain2.com;
access_log logs/domain2.access.log main;
root /var/www/domain2.com/htdocs;
} }
独立虚拟主机:
index index.html;
server {
listen 80 default;
server_name _;
access_log logs/default.access.log main;
server_name_in_redirect off;
root /var/www/default/htdocs;
} }
指定所有的二级域名:
# Replace this port with the right one for your requirements
listen 80 [default|default_server]; #could also be 1.2.3.4:80
# Multiple hostnames separated by spaces. Replace these as well.
server_name star.yourdomain.com *.yourdomain.com; # Alternately: _
root /PATH/TO/WEBROOT/$host;
error_page 404 errors/404.html;
access_log logs/star.yourdomain.com.access.log;
index index.php index.html index.htm;
# serve static files directly
location ~* .(jpg|jpeg|gif|css|png|js|ico|html)$ {
access_log off;
expires max;
}
location ~ .php$ {
include fastcgi_params;
fastcgi_intercept_errors on;
# By all means use a different server for the fcgi processes if you need to
fastcgi_pass 127.0.0.1:YOURFCGIPORTHERE;
}
location ~ /.ht {
deny all;
} }
gzip压缩是否启用,除了服务器支持外,客户端也要支持。
当客户端发送Accept-Encoding:gzip这个request header,服务器即认为其能接受gzip压缩,就响应一个Content-Encoding:gzip,并发送压缩内容;
假如客户端没有发送 Accept-Encoding,那么服务器就把源代码原样输出。
能不能让客户端无论有没有发送Accept-Encoding,服务器都会发送压缩内容呢?
这样做的好处:
1、进一步节省带宽。
2、防止水平一般的爬虫抓页面偷数据。
经测试,此种做法并不会影响普通用户,因为他们都是用先进的浏览器上网的;
另外,也不会影响主流的搜索引擎,收录仍然会正常。
要做到这点,需要有两个nginx,配置两个虚拟主机也可以,并不用启动两个nginx主进程。
前端nginx:
gzip压缩不在前端nginx进行,前端主要是用来强制修改request header,配置代码:
proxy_set_header Accept-Encoding 'gzip';
这样,后台的nginx无论如何都将接收到Accept- Encoding:gzip,而不管客户端有没有发。
server 127.0.0.1:80;
}
server {
server_name www.;
listen 80;
location / {
proxy_pass http://www.backend.;
include proxy.conf;
proxy_set_header Accept-Encoding 'gzip';
} }
注意proxy_pass到的upstream是www.backend.,这是在一台机器上配置两个虚拟主机所必需的,否则就像死循环一样了。
如果想用www.,可以将前端的listen改成外网ip,后端使用127.0.0.1。
另外一个要注意proxy.conf里最好没有写过proxy_set_header Accept-Encoding,我的proxy.conf默认有将Accept-Encoding设为空的,这会造成配置重复。
但proxy_set_header不会冲突,可以按配置先后顺序生效,我一时忘了是前生效还是后生效,动手测一下便知。
后端nginx:
后端nginx负责压缩,这里要注意gzip的版本,因为nginx是用http1.0方式作代理的,所以gzip的版本就不能是默认的1.1版,需要修改为1.0。
配置代码:server_name www.backend.;
listen 80;
location / {
root /html/;
gzip on;
gzip_http_version 1.0;
}
}
测试:
curl -I http://www.
看到返回内容中 Content-Encoding:gzip 即说明配置生效。
不加-I参数试试:curl http://www.
打印出一堆乱码。