面试的时候被问到nginx怎么实现反向代理,要我当场写出具体的指令,当时是大概写出来了。

之前做过但是没有做好笔记,趁着现在上班没事做,整理一下笔记,把实验完整的做出来。

       我要做的是通过nginx 简单的实现反向代理,将用户对web服务器的请求代理到一个服务器池,其实这也是负载均衡吧,感觉跟之前做过的lvs挺像,也就是分发请求,实验拓扑图如下:

实验平台:rhel6.3_x64  

    首先在server2和server3上搭建web环境,分别作为web1和web2服务器,两个服务器上的配置完全一样,server3的安装配置参照server2的进行。

【所需软件包下载地址】

[root@server2~]#wget http://mirror.bjtu.edu.cn/apache/httpd/httpd-2.2.23.tar.gz

【安装所需软件包】

 

[root@server2~]#yum -y install gcc gcc-c++ make

[root@server2~]# tar -zxvf httpd-2.2.23.tar.gz

[root@server2 ~]# cd httpd-2.2.23

[root@server2 httpd-2.2.23]#./configure --prefix=/usr/local/apache2

[root@server2 httpd-2.2.23]# make

[root@server2 httpd-2.2.23]# make install

 

[root@server2 ~]# vim /usr/local/apache2/conf/httpd.conf

修改Servername 192.168.56.102:80

启动httpd服务

[root@vhost1 html]# /usr/local/apache2/bin/apachectl start

为了区分两台web服务器,我们将首页内容修改一下

[root@server2 ~]# vim /usr/local/apache2/htdocs/index.html 

<html><body><h1>This is server1,It works!</h1></body></html>

[root@server3 ~]# vim /usr/local/apache2/htdocs/index.html 

<html><body><h1>This is server2,It works!</h1></body></html>

测试

 

至此,web环境配置成功,接下来在server1上配置nginx实现反向代理。

[root@server1 src]# tar xfnginx-1.4.1.tar.gz

[root@server1 src]# cd nginx-1.4.1

[root@server1 nginx-1.4.1]# useradd -s /sbin/nologin -M www

[root@server1 nginx-1.4.1]# ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_gzip_static_module  --without-http_uwsgi_module --without-http_scgi_module --without-http_upstream_ip_hash_module --with-http_perl_module --with-pcre

[root@server1 nginx-1.4.1]# make && make install

配置nginx

[root@server1 nginx]# vim conf/nginx.conf

user  www www;
worker_processes  8;

error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

pid        logs/nginx.pid;

events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    tcp_nopush     on;

    keepalive_timeout  65;
    gzip  on;


    upstream web_server_pool {
        server 192.168.56.102:80 weight=4 max_fails=2 fail_timeout=30s;
        server 192.168.56.103:80 weight=4 max_fails=2 fail_timeout=30s;
    }

 

    server {
        listen       80;
        server_name  192.168.56.101;


        location / {
            root   html;
            index  index.html index.htm;
            proxy_pass http://web_server_pool;
            proxy_set_header Host $host;

      proxy_set_header X-Real-IP $remote_addr; 
            proxy_set_header X-Forwarded-For $remote_addr;
        }

 

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }
}

启动nginx

[root@server1 nginx]# sbin/nginx

测试: