nginx配置全局反向代理

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; 
        } 
    } 
}