Nginx反向代理多虚拟主机及记录真实客户IP

1.多虚拟机反向代理

___________________________________________________________

主机信息:

Nginx代理:192.168.1.201

Nginx_web_1:192.168.1.202

Nginx_web_2:192.168.1.203

测试机:192.168.1.204

-----------------------------------三台主机安装

#安装参数

cd /usr/local/src/
tar zxvf nginx-1.6.2.tar.gz
cd nginx-1.6.2
yum install -y pcre-devel openssl-devel gzip
yum install openssl-devel  -y
 ./configure   --prefix=/usr/local/nginx   --with-pcre  --with-http_ssl_module --with-http_stub_status_module
make && make install

#启动脚本略

#主配置略

----------------------------------两台web虚拟主机配置

#虚拟主机配置

mkdir /usr/local/nginx/conf/vhosts
vim  /usr/local/nginx/conf/vhosts/server.conf
  server {
      listen 80 ;
      server_name bbs.szk.com;
      location / {
           root /data/bbs;
           index index.html index.htm;
          }
      access_log logs/access_bbs.log ;
       }
     server {
      listen 80 ;
      server_name www.szk.com;
      location / {
           root /data/www;
           index index.html index.htm;
          }
      access_log logs/access_www.log ;
 }

---------------------------------两台web创建站点目录及测试文件

for n in bbs www;do mkdir -p /data/$n;echo "$n.szk.com_202" >/data/$n/index.html;done
cat /data/bbs/index.html 
echo "192.168.1.202 www.szk.com" >> /etc/hosts
echo "192.168.1.202 bbs.szk.com" >> /etc/hosts
/etc/init.d/nginx configtest
/etc/init.d/nginx start
for n in bbs www;do mkdir -p /data/$n;echo "$n.szk.com_203" >/data/$n/index.html;done
cat /data/www/index.html
echo "192.168.1.203 www.szk.com" >> /etc/hosts
echo "192.168.1.203 bbs.szk.com" >> /etc/hosts
/etc/init.d/nginx configtest
/etc/init.d/nginx start

------------------------------ nginx代理配置

vim /usr/local/nginx/conf/nginx.conf
  upstream www_server_pools {
       server 192.168.1.202:80 weight=1;
       server 192.168.1.203:80 weight=1;
    }    
   
    upstream bbs_server_pools {
       server 192.168.1.202:80 weight=1;
       server 192.168.1.203:80 weight=1;
    }
    server {
       listen 80;
       server_name www.szk.com;
         location / {
         proxy_pass http://www_server_pools;
         }
      }
   server {
       listen 80;
       server_name bbs.szk.com;
         location / {
         proxy_pass http://bbs_server_pools;
         }
      }
echo "192.168.1.201 www.szk.com" >> /etc/hosts
echo "192.168.1.201 bbs.szk.com" >> /etc/hosts

-----------------------------------测试

[[email protected] ~]#
echo "192.168.1.201 www.szk.com" >> /etc/hosts
echo "192.168.1.201 bbs.szk.com" >> /etc/hosts
[[email protected] ~]# curl bbs.szk.com
bbs.szk.com_202
[[email protected] ~]# curl bbs.szk.com
bbs.szk.com_203
[[email protected] ~]# curl www.szk.com
bbs.szk.com_203
[[email protected] ~]# curl www.szk.com
bbs.szk.com_202

#反向代理、负载均衡功能已经实现,但有多台虚拟主机时,出现访问出错

原因:

当用户访问域名时确实是携带了www.szk.com的主机头请求Nginx反向代理服务器,但是反向代理向下面WEB节点发起请求时,默认并没有在请求头里告诉节点服务器要找那台虚拟主机,所以,WEB节点服务器接收到请求后发现没有主机头信息,因此,就把节点服务器的第一个虚拟主机发给了反向代理了。

解决:

当反向代理向后重新发起请求时,要携带主机头信息,以明确告诉节点服务器要找哪个虚机主机。在Nginx代理www服务虚拟主机配置里增加如下配置即可:

proxy_set_header Host $host;

[[email protected] ~]# curl bbs.szk.com
bbs.szk.com_202
[[email protected] ~]# curl bbs.szk.com
bbs.szk.com_203
[[email protected] ~]# curl www.szk.com
bbs.szk.com_203
[[email protected] ~]# curl www.szk.com
bbs.szk.com_202

2.记录真实客户端IP

多虚机负载及代理成功了,但是WEB日志访问IP是代理服务器的而不是真实客户端的

___________________________________________________________

[[email protected] ~]# cat /usr/local/nginx/logs/access_bbs.log
192.168.1.202 - - [19/Feb/2016:08:50:17 +0800] "GET / HTTP/1.1" 200 16 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2"
192.168.1.201 - - [19/Feb/2016:09:16:22 +0800] "GET / HTTP/1.0" 200 16 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2"
192.168.1.201 - - [19/Feb/2016:09:16:26 +0800] "GET / HTTP/1.0" 200 16 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2"
192.168.1.201 - - [19/Feb/2016:09:16:27 +0800] "GET / HTTP/1.0" 200 16 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2"

-------------------------------------Nginx代理配置

[[email protected] ~]#  
 vim /usr/local/nginx/conf/nginx.conf
    log_format main ‘$remote_addr - $remote_user [$time_local] "$request" ‘
    ‘$status $body_bytes_sent "$http_referer" ‘
    ‘"$http_user_agent" "$http_x_forwarded_for"‘;
    server {
       listen 80;
       server_name bbs.szk.com;
         location / {
         proxy_pass http://bbs_server_pools;
         proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $remote_addr;

----------------------------------WEB配置

[[email protected] ~]# 
vim /usr/local/nginx/conf/nginx.conf
    log_format main ‘$remote_addr - $remote_user [$time_local] "$request" ‘
    ‘$status $body_bytes_sent "$http_referer" ‘
    ‘"$http_user_agent" "$http_x_forwarded_for"‘

;

-----------------------------------测试

[[email protected] ~]# cat  /usr/local/nginx/logs/access_bbs.log
192.168.1.201 - - [19/Feb/2016:13:42:37 +0800] "GET / HTTP/1.0" 200 16 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "192.168.1.204"
192.168.1.201 - - [19/Feb/2016:13:42:43 +0800] "GET / HTTP/1.0" 200 16 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "192.168.1.204"
时间: 2024-11-08 20:24:33

Nginx反向代理多虚拟主机及记录真实客户IP的相关文章

利用nginx反向代理,后端Web如何获取真实客户ip

利用nginx反向代理,后端Web如何获取真实客户端ip 一.nginx反向代理nginx,后端的nginx该如何配置才能获取到客户端的真实IP地址呢. 1.首先需要在nginx代理服务器上的配置文件nginx.conf上的 location 中添加一行参数: proxy_set_header  X-Real-IP  $remote_addr; 重启nginx服务 2.对后面的nginx进行配置 vim /usr/local/nginx/conf/nginx.conf 加入下面参数: set_r

nginx反向代理,虚拟主机

nginx反向代理,虚拟主机 一.配置虚拟主机1.基于端口配置虚拟主机1.1配置文件: [[email protected] conf.d]# vim vhost.conf server { listen 8080 ; root /usr/share/nginx/html; location / { } } server { listen 8081; root /usr/share/nginx/html; location / { } } 1.2验证:2.基于IP地址配置虚拟主机:2.1配置文件

lvs的nat和dr实现,nginx反向代理,虚拟主机

1.LVS的基本用法 1.管理工具:ipvsadm2.基本概念 VS:Virtual Server,调度器 RS:Real Server(lvs), upstream server(nginx) backend server(haproxy) 实际服务器 CIP:Client IP 客户端IP VIP: Virtual serve IP VS外网的IP DIP: Director IP VS内网的IP RIP: Real server IP 实际服务器IP 3.转发模式: lvs-nat:修改请

Nginx反向代理多虚拟主机代理

根据http://www.cnblogs.com/zzzhfo/p/6032095.html这个环境配置 在web01和web02上配置基于域名的虚拟主机 web01 [[email protected] /]# mkdir -p /var/www/html/www [[email protected] /]# mkdir -p /var/www/html/bbs [[email protected] /]# echo "<h1>bbs.test.com<h1/>&quo

nginx反向代理增加虚拟目录

为nginx反向代理增加虚拟目录 比如: 将http://domain.com/test/abc.html 代理到 http://127.0.0.1/abc.html 方法一: 在反向代理路径后面添加"/" location /test {     proxy_pass http://127.0.0.1/; } 方法二: 使用rewrite location /test {     rewrite /test/(.*) /$1 break;     proxy_pass http://

nginx 反向代理实现负载均衡*配置实战

(接理论篇) 查看lb01的配置文件如下: cat /usr/local/nginx/conf/nginx.conf worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; upstream www_server_pools { #默认调度算

nginx反向代理取得IP地址

nginx反向代理后,在应用中取得的ip都是反向代理服务器的ip,取得的域名也是反向代理配置的url的域名,解决该问题,需要在nginx反向代理配置中添加一些配置信息,目的将客户端的真实ip和域名传递到应用程序中. nginx反向代理配置时,一般会添加下面的配置: proxy_set_header Host $host;      proxy_set_header X-Real-IP $remote_addr;      proxy_set_header REMOTE-HOST $remote_

nginx 反向代理 取得真实IP和域名

nginx反向代理后,在应用中取得的ip都是反向代理服务器的ip,取得的域名也是反向代理配置的url的域名,解决该问题,需要在nginx反向代理配置中添加一些配置信息,目的将客户端的真实ip和域名传递到应用程序中. nginx反向代理配置时,一般会添加下面的配置: proxy_set_header Host $host;      proxy_set_header X-Real-IP $remote_addr;      proxy_set_header REMOTE-HOST $remote_

配置LANMP环境(7)-- 配置nginx反向代理,与配置apache虚拟主机

一.配置nginx反向代理 1.修改配置文件 vim /etc/nginx/nginx.conf 在35行http下添加一下内容: include /data/nginx/vhosts/*.conf; include /etc/nginx/upstream.conf; 2.在/etc/nginx/目录下新建 upstream.conf文件 vim upstream.conf upstream dev.test1.com { server 127.0.0.1(换成虚拟机ip):8080 weigh