当前位置:首页 > CN2资讯 > 正文内容

nginx的反向代理nginx的正向代理和反向代理

8小时前CN2资讯



用nginx做反向代理

前提是已经安装了nginx(安装步骤见上一篇博客)


代理机的配置步骤:

nginx代理机的ip:192.168.186.128

cd /usr/local/nginx/conf/

mv nginx.conf nginx.conf.old

vi nginx.conf                    (这是最优配置)

#user  nobody nobody;

worker_processes  8;

error_log  logs/error.log warn;

pid        logs/nginx.pid;

worker_rlimit_nofile 51200;                (确保ulimit -n,打开文件数至少为51200)


events {

    use epoll;

    worker_connections  51200;

}


http {

    include       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" "$request_time"';


    #charse  gb2312;


    server_names_hash_bucket_size 128;

    client_header_buffer_size 32k;

    large_client_header_buffers 4 32k;


    sendfile       on;


    #tcp_nopush     on;

    tcp_nodelay    on;


    client_header_timeout 30;

    client_body_timeout 30;

    send_timeout   30;

    client_max_body_size 100M;


    proxy_connect_timeout  100;

    proxy_send_timeout  100;

    proxy_read_timeout  100;

    proxy_buffer_size  16k;

    proxy_buffers  4 32k;

    proxy_busy_buffers_size  64k;



    keepalive_timeout  60;


    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 128k;


    gzip  on;

    gzip_min_length 1k;

    gzip_buffers 4 16k;

    gzip_http_version 1.1;

    gzip_comp_level 2;

    gzip_types text/plain application/x-javascript text/css application/xml text/javascript;

    gzip_vary on;


    upstream web1 {

       server 192.168.186.129;

       server 192.168.186.130:8080;          (默认80端口不需要指定,非80端口需要指定)

    }


    upstream web2 {

       server 192.168.186.131;

       server 192.168.186.132;

    }

    server   {                                (定义一个默认的虚拟主机)

       listen 80 default;  

       server_name _;  

       return 500;  

    }

include vhosts/*.conf;

}


注意:include vhosts/*.conf;           这一行是添加在http{}模块里的,注意后面的分号

      默认虚拟主机的意义:

                         nginx的默认虚拟主机在用户通过IP访问,或者通过未设置的域名访问(比如有人把他自己的域名指向了你的ip)的时候生效. 这个设置非常有用, 比如别人通过ip或者未知域名访问你的网站的时候,你希望禁止显示任何有效内容,可以给他返回500.目前国内很多机房都要求网站主关闭空主机头,防止未备案的域名指向过来造成麻烦


mkdir vhosts                   (这个vhosts目录是在/usr/local/nginx/conf/目录下创建的)

cd vhosts

vi .conf

server{

  listen 80;

  server_name ;

  access_log /usr/local/nginx/logs//access.log;


  location / {

          proxy_pass http://web1;

          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_next_upstream http_502 http_504 error timeout invalid_header; 

  }

}

注意:proxy_next_upstream http_502 http_504 error timeout invalid_header; 这行的作用是:如果后端处理用户请求的web服务器返回502 504 error timeout等错误时,自动将请求转发到此upstream主机池中的另外一台服务器,实现故障转移


vi .conf            (可以在vhosts目录下创建多个虚拟主机,来作为反向代理)

server{

  listen 80;

  server_name ;

  access_log /usr/local/nginx/logs//access.log;


  location / {

          proxy_pass http://web1;

          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_next_upstream http_502 http_504 error timeout invalid_header; 

  }

}

/usr/local/nginx/sbin/nginx -s stop           (重新启动nginx)

/usr/local/nginx/sbin/nginx





后端web服务器的配置:

LNMP环境:前提是已经安装了lnmp环境(安装步骤见上一篇博客)

nginx的配置:

vi nginx.conf

#user nobody nodoby; worker_processes  8; error_log  logs/error.log; pid        logs/nginx.pid; worker_rlimit_nofile 51200; events {     use epoll;     worker_connections  51200; } http {     include       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';                                                       sendfile       on;     tcp_nopush     on;     tcp_nodelay    on;     client_header_buffer_size 32k;     large_client_header_buffers 4 32k;     client_max_body_size 8m;     server_tokens off;     keepalive_timeout  60;     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 128k;                                                                                                                                                                                                                      gzip  on;     gzip_min_length 1k;     gzip_buffers 4 16k;     gzip_http_version 1.1;     gzip_comp_level 2;     gzip_types text/plain application/x-javascript text/css application/xml text/javascript;     gzip_vary on;     server {         listen       80;         server_name  ;         root /opt/nginx/www/;         index index.html index.php index.htm;         access_log  logs//access.log main;         error_page   500 502 503 504  /50x.html;         location = /50x.html {             root   html;         }         location ~ .*\.php$ {             fastcgi_pass   127.0.0.1:9000;             fastcgi_index  index.php;             include        fastcgi_params;             fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;         }         location ~ .*\.(gif|jpg|png|swf|bmp|jpeg)$ {             expires 10d;         }         location ~ .*\.(js|css)?$ {             expires 1h;         }     }     server {         listen       80;         server_name  ;         root /opt/nginx/www/;         index index.html index.php index.htm;         access_log  logs//access.log main;         error_page   500 502 503 504  /50x.html;         location = /50x.html {             root   html;         }         location ~ .*\.php$ {             fastcgi_pass   127.0.0.1:9000;             fastcgi_index  index.php;             include        fastcgi_params;             fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;         }         location ~ .*\.(gif|jpg|png|swf|bmp|jpeg)$ {             expires 10d;         }         location ~ .*\.(js|css)?$ {             expires 1h;         }     } }


注意:也可以使用include vhosts/*.conf;将两个虚拟主机单独作为一个文件


mkdir -p /opt/nginx/www/{,}         (创建网站根目录)

cd /opt/nginx/www//

echo www > index.html

cd /opt/nginx/www//

echo ftp > index.html




php配置:

php不需要做任何配置





测试:

对  和   作DNS解析

或者在代理服务器192.168.186.128的/etc/hosts文件写入:

192.168.186.128

192.168.186.128


在windows上打开浏览器分别访问 和

此时需要在windows的/hosts文件里也加入:

192.168.186.128

192.168.186.128






附加:真实的工作环境中,我们需要对两个主机名 和 作DNS解析

      这两个域名的A记录,对应的ip是nginx代理服务器的ip,不是后端web服务器的ip

      web服务器nginx配置文件里配置的server{}里面的主机名只是一个标识。比如我们访问,代理服务器把请求交给后端的web服务器去处理,首先会去找主机名为的虚拟主机,由它去处理;若web服务器没有主机名为的虚拟主机,则默认由第一个虚拟主机去处理这个请求。










反向代理交给tomcat:

user nginx nginx; worker_processes  2; error_log  logs/error.log; pid        logs/nginx.pid; worker_rlimit_nofile 65535; events {     use epoll;     worker_connections  65535; } http {     include       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';     server_names_hash_bucket_size 128;     client_header_buffer_size 32k;     large_client_header_buffers 4 32k;     sendfile       on;     #tcp_nopush     on;     tcp_nodelay    on;     client_header_timeout 30;     client_body_timeout 30;     send_timeout   30;     client_max_body_size 100M;     keepalive_timeout  60;     proxy_connect_timeout  100;     proxy_send_timeout  100;     proxy_read_timeout  100;     proxy_buffer_size  16k;     proxy_buffers  4 32k;     proxy_busy_buffers_size  64k;     gzip  on;     gzip_min_length 1k;     gzip_buffers 4 16k;     gzip_http_version 1.1;     gzip_comp_level 2;     gzip_types text/plain application/x-javascript text/css application/xml text/javascript;     gzip_vary on;     upstream web1{       server 192.168.247.128:8080;     }     server {         listen       443;         server_name  ;         root /opt/nginx/www/;         index index.html index.htm index.jsp;         ssl on;         ssl_certificate /usr/local/nginx/ca/server.crt;         ssl_certificate_key /usr/local/nginx/ca/server.key;         access_log  logs//access.log main;         error_page   500 502 503 504  /50x.html;         location = /50x.html {             root   html;         }         location ~ .*\.jsp$ {           proxy_pass http://web1;           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_next_upstream http_502 http_504 error timeout invalid_header;         }         location ~ .*\.(gif|jpg|png|swf|bmp|jpeg)$ {             expires 10d;         }         location ~ .*\.(js|css)?$ {             expires 1h;         }     }     #server {        #listen 80 default;        #server_name _;        #return 500;     #} }










    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/24856.html

    分享给朋友:

    “nginx的反向代理nginx的正向代理和反向代理” 的相关文章