周五测试:
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