坚持#第267天~周五测试-nginx代理服务器、真实服务器的nginx虚拟主机

周五测试:

 

 

nginx或apache都行

nginx也行

 

两台服务器:

 

解:

环境:

代理服务器:192.168.56.63 nginx做代理

虚拟主机1:192.168.56.57 yum安装的apache做163网页

虚拟主机2:192.168.56.58 yum安装的apache做google网页

客户端:   192.168.56.59 使用curl命令来访问代理服务器

 

代理服务器:

vim/usr/local/nginx/conf/nginx.conf

第2行改为user  nginx;

server{

        listen 80;

        server_name www.163.com;

        location / {

            proxy_pass http://192.168.56.57;

            proxy_set_header clientIP$remote_addr;

        }

}

server{

        listen 80;

        server_name www.google.com;

        location / {

            proxy_pass http://192.168.56.58;

            proxy_set_header clientIP$remote_addr;

        }

}

保存退出并开启nginx服务

 

虚拟主机1:

yum install-y httpd

echo"xu ni zhu ji 1" > /var/www/html/index.html

vim/etc/httpd/conf/httpd.conf

找到196行有个%h,将这个改为%{clientIP}i

保存退出

systemctlstart httpd

tail -0f/etc/httpd/logs/access_log

 

虚拟主机2:

yum install-y httpd

echo"xu ni zhu ji 2" > /var/www/html/index.html

vim/etc/httpd/conf/httpd.conf

找到196行有个%h,将这个改为%{clientIP}i

保存退出

systemctlstart httpd

tail -0f/etc/httpd/logs/access_log

 

客户端:

vim/etc/hosts

192.168.56.63www.163.com

192.168.56.63www.google.com

保存退出

curlwww.163.com会发现虚拟主机1收到了这个:

[root@litao5657html]# tail -0f /etc/httpd/logs/access_log

192.168.56.59- - [13/Jan/2018:10:47:07 +0000] "GET / HTTP/1.0" 200 15"-" "curl/7.29.0"

 

curlwww.google.com会发现虚拟主机2收到了这个:

[root@litao5658~]# tail -0f /etc/httpd/logs/access_log

192.168.56.59- - [12/Jan/2018:10:48:40 +0000] "GET / HTTP/1.0" 200 15"-" "curl/7.29.0"

 

得到了我们想要的结果,解答完毕!

 

 

题意理解错了,不要搞两个真实主机,后面只有一个ip!一个真实服务器,这个真实服务器里面有两个虚拟主机,要求基于域名的“虚拟主机”,就一个ip!

提示:报文里面的某一项,真实ip怎么传的,再想想这个怎么传的

 

解:

环境:

代理服务器:192.168.56.63 nginx做代理

真实服务器:192.168.56.57 nginx里做两个网站,使用基于域名的虚拟主机

客户端:   192.168.56.59 使用curl命令来访问代理服务器

 

代理服务器:

vim/usr/local/nginx/conf/nginx.conf

第2行改为user  nginx;

server{

        listen 80;

        server_name www.163.com;

        location / {

            proxy_pass http://192.168.56.57;

            proxy_set_header clientIP$remote_addr;

        }

}

server{

        listen 80;

        server_name www.google.com;

        location / {

            proxy_pass http://192.168.56.57;

            proxy_set_header clientIP$remote_addr;

        }

}

 

保存退出并开启nginx服务

 

真实服务器:

mkdir/usr/local/nginx/html/163

mkdir/usr/local/nginx/html/google

vim/usr/local/nginx/conf/nginx.conf

第2行改为user  nginx;

server{

        listen 80 default;

        server_name www.163.com;

        location / {

            root html/163;

            index index.html;

            set_real_ip_from 192.168.56.63;

            real_ip_header clientIP;

        }

}

server{

        listen 80 default;

        server_name www.google.com;

        location / {

            root html/google;

            index index.html;

            set_real_ip_from 192.168.56.63;

            real_ip_header clientIP;

        }

}

保存退出并开启nginx服务

echo"xu ni zhu ji 1" > /usr/local/nginx/html/index.html

echo"xu ni zhu ji 2" > /usr/local/nginx/html/index.html

 

客户端:

vim/etc/hosts

192.168.56.63www.163.com

192.168.56.63www.google.com

保存退出

curlwww.163.com会发现虚拟主机1收到了这个:

[root@litao5657html]# tail -0f /etc/httpd/logs/access_log

192.168.56.59- - [13/Jan/2018:10:47:07 +0000] "GET / HTTP/1.0" 200 15"-" "curl/7.29.0"

 

curlwww.google.com会发现虚拟主机2收到了这个:

[root@litao5658~]# tail -0f /etc/httpd/logs/access_log

192.168.56.59- - [12/Jan/2018:10:48:40 +0000] "GET / HTTP/1.0" 200 15"-" "curl/7.29.0"

 

订正:

遇到问题:

题意理解错了,不要搞两个真实主机,后面只有一个ip!一个真实服务器,这个真实服务器里面有两个虚拟主机,要求基于

域名的“虚拟主机”,就一个ip!

提示:报文里面的某一项,真实ip怎么传的,再想想这个怎么传的

要求只写一个server,但是一个server只能对应一个server_name吗?多个name以空格分隔。

然后一个真实服务器里面怎么可能会有两个虚拟主机呢?难道是利用nginx做虚拟主机?没错就是利用nginx来做虚拟主机

 

$Host?

修改报文头里面的字段?

 

报文里面的变量字段都可以直接用

 

终于知道为什么

当客户机设置/etc/hosts为真实服务器去访问www.163.com会出现想要的163,但是,当客户机设置/etc/hosts为代理机去访问www.163.com就会出现客户机的默认页面也就是欢迎nginx的页面,发现获取的不是域名,而是普通ip地址,获取到的是一个不知道的域名(这个域名从报文中查看发现是Host值,Host值对server_name有影响),就去访问default默认的网页了

Host:192.168.56.57

Full requestURI: http://192.168.56.57

如何修改报文中的Host值?

答:命名一个变量,而这个变量名就是Host,这就可以将报文中的Host原来的值给覆盖掉了,相当于重新给它赋值,一行代

码:在代理机的server里面的location里面写proxy_set_header Host$Host;意思就是声名一个变量叫Host,将代理机获取

客户端的域名的值www.google.com赋值给Host这个变量,Host这个变量名是自己随便起的,而与报文中Host相同的名字,这

就覆盖了报文中的Host值了,成功实现了想要的结果,从而使Full requestURI: www.google.com成功了:

Host:www.google.com

Full requestURI: http://www.google.com

 

server_namename ...(多个name以空格分隔)

 

[root@litao5657html]# !tail

tail -0f/usr/local/nginx/logs/access.log

192.168.56.59- - [13/Jan/2018:21:44:26 +0000] "GET / HTTP/1.0" 200 7 "-""curl/7.29.0"

192.168.56.59- - [13/Jan/2018:21:44:36 +0000] "GET / HTTP/1.0" 200 4 "-""curl/7.29.0"

192.168.56.56- - [13/Jan/2018:21:45:51 +0000] "GET / HTTP/1.0" 200 4 "-""curl/7.29.0"

192.168.56.56- - [13/Jan/2018:21:46:09 +0000] "GET / HTTP/1.0" 200 7 "-""curl/7.29.0"

真实服务器:

server{

        listen 80;

        server_name www.163.com;

        location / {

            root html/163;

            index index.html;

            set_real_ip_from 192.168.56.63;

            real_ip_header clientIP;

        }

}

server{

        listen 80;

        server_name www.google.com;

        location / {

            root html/google;

            index index.html;

            set_real_ip_from 192.168.56.63;

            real_ip_header clientIP;

        }

}

代理机:

server{

        listen 80;

        server_name www.google.com www.163.com;

        location / {

            proxy_pass http://192.168.56.57;

            proxy_set_header clientIP$remote_addr;

            #保存客户端发送的域名并赋值给报文中的Host,从而保证URI指向客户端发送的域名

            proxy_set_header Host $Host;

        }

}

 

验证起一个clientIP名字行不行,不行就加1,2:行,不需加1,2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值