面试的时候被问到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
测试: