nginx配置反向代理,目前我会一点,但是原理我几乎没想通。在网上搜索来搜索去,都是如下的配置方法:
server {
listen 80;
server_name www.fuck.com;
location / {
proxy_pass http://www.befucked.com/;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
以上代码就是用www.fuck.com
代理http://www.befucked.com/
,我测试发现,如果http://www.befucked.com/
网站html里含有http://www.befucked.com/
这种绝对地址,那么通过www.fuck.com
访问网站,有些链接还是http://www.befucked.com/
的,根本没法用嘛。
.
我需要实现的是这种:
A作为后端服务器,上有20个网站;B作为代理服务器,我想把那20个网站域名解析到B代理服务器的ip上,能正常访问A后端服务器里的各个网站。找来找去,终于找到如下代码:
server {
listen 80;
server_name localhost;
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;
}
}
经过测试,这个方法可行!proxy_pass直接指向A后端服务器的ip地址。我理解为:访问域名,dns解析到B代理服务器上,B代理服务器找A后端服务器里对应的虚拟主机内容。
下面再贴出整个nginx的代码,是目前我也测试过且正在用的配置,和上面代码大同小异:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 32k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
proxy_ignore_client_abort on;
proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
proxy_max_temp_file_size 128m;
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://173.252.251.124:80;
}
}
}