Nginx设置反向代理内网服务器/内部端口

by Web全栈工程师 on 2015 年 07 月 26 日

Nginx 是一个很强大的高性能Web和反向代理服务器,它具有很多非常优越的特性,本次主要解决Nginx反向代理设置问题。
假定有一台能正常访问的外网Nginx服务器A和一台内网Nginx服务器B,服务器A能访问到服务器B,而外网用户无法直接访问到服务器B。
现在通过服务器A配置Nginx反向代理服务器B从而实现外网用户访问到内网服务器。
同理,还可以应用在同一服务器的不同端口,用nginx统一做代理。

配置反向代理

  1. 将域名www.magentonotes.com解析到服务器A
  2. 在服务器A添加一个虚拟主机
  3. 默认配置文件添加到

    /etc/nginx/sites-enabled
    server {
        listen 80;
        server_name www.magentonotes.com;
        index index.php;
     
        location / {
            proxy_redirect off; #关闭重定向
     
            #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
            proxy_set_header Host $host; #将请求头发送到内网服务器
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://192.168.1.1:80; #设置内网服务器访问地址
     
            client_max_body_size 100m; #客户端允许上传的最大文件大小
            client_body_buffer_size 128k; #允许客户端请求的最大单文件字节数
     
            proxy_connect_timeout 5; #nginx跟后端服务器连接超时时间
            proxy_read_timeout 60; #连接成功后,后端服务器响应时间
            proxy_send_timeout 5; #后端服务器发送时间
     
            proxy_buffer_size 4k; #设置nginx代理服务器保存用户头信息的缓冲区大小
            proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
            proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
            proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传递请求,而不缓冲到磁盘
            proxy_ignore_client_abort on; #不允许代理端主动关闭连接
        }
     
        access_log off; #关闭日志
    }
    	
  4. 确保服务器B在内网能用域名www.magentonotes.com正常访问
  5. 如果需要打开日志,在服务器B上这么设置
  6. log_format access '$http_x_real_ip - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
     
    access_log /var/log/nginx/access.log access;		
    	

    默认的日志设置是这样的:

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
     
    access_log  /var/log/nginx/access.log  main;	
    
  7. 尝试从外网访问

Nginx优化设置

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
 
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
 
    #access_log  /var/log/nginx/access.log  main;
    access_log off;
 
    sendfile        on;
    server_names_hash_bucket_size 128;
    client_header_buffer_size 32k;
    large_client_header_buffers 4 32k;
    client_max_body_size 50m;
    tcp_nopush on;
 
    keepalive_timeout  65;
 
    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
    fastcgi_buffer_size 64k;
    fastcgi_buffers 4 64k;
    fastcgi_busy_buffers_size 128k;
    fastcgi_temp_file_write_size 256k;
 
    gzip on;
    gzip_min_length  1k;
    gzip_buffers     4 16k;
    gzip_http_version 1.1;
    gzip_comp_level 2;
    gzip_types     text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss;
    gzip_vary on;
    gzip_proxied   expired no-cache no-store private auth;
    gzip_disable   "MSIE [1-6]\.";
 
    include conf.d/*.conf;
    include vhost/*.conf;
}

Comments on this entry are closed.

Previous post:

Next post: