nginx反向代理笔记

课前回顾


mysqladmin -uroot password 1	#给root用户密码(必须要做)
mysql -uroot -p1
create database wp;		#创建数据库
create database zh;
show databases;
grant all on *.* to php_user@'%' identified by '1';		#创建通用的用户
show tables from zh;	#查看数据库里面的内容
select user,host from mysql.user;	#查看mysql数据库的用户

#数据库
默认就有一个root用户,相当于linux的root用户,不过数据库的root用户不使用密码就可以登录
集群中有不同的用户,不同的用户的作用不同,linux用户,PHP用户,wp用户,匿名用户或者虚拟用户,
数据库的用户
数据库(某某库)
	user表有数据库用户,只有记录在册的用户才能登录数据库
	xx表,下面有文件
	xxx表
*.*	库.表 ,所有库.所有表

用户跟表毫无关系
wordpress图形化填写注册内容,系统生成.php文件记录,连接数据库存储
WordPress创建用户,写的文章,都记录在相应的表里(图片存在nfs)

ip访问网站,哪个.conf在上面,就访问哪个.conf
nginx日志里面,分隔符随意,不需要转义,引号外面的打印出字符串,里面的先执行,因为 ''

proxy	代理
set		设置
host	
$host	域名

nginx反向代理的location模块
location / {
    proxy_pass       http://localhost:8000;
    proxy_set_header Host      $host;
    proxy_set_header X-Real-IP $remote_addr;
}

	Navicat是一套快速、可靠并价格相当便宜的数据库管理工具,Navicat 是以直觉化的图形用户界面而建的,让你可以以安全并且简单的方式创建、组织、访问并共用信息。

知乎上传的图片在uploads里,上传后会改名,不能使用find查找,WordPress用户上传图片之后,图片不会改名可以使用 grep -r *.png /wp 找到指定的图片 

不能通过修改域名或者端口的方式来连接nginx搭载的WordPress网站,因为原来的域名已经在WordPress的设置里面记录,修改端口或者域名后,都不能连接WordPress,这样,浏览器输入域名后访问,就会直接访问第一个location(这个时候域名=IP)(#当域名指定的location不能访问,nginx就会直接去访问第一个location指定的站点目录下默认的文件,显示出内容,或者下载)
除非在WordPress里面做出对应的修改

鲨鱼可以监听vmnet8这块网卡,但是不能监听lan区段内所有主机(可以理解为是不同的网卡)

统一区域网下域名可以重复,IP不能重复

什么是代理

代理其实就是一个中介,A和B本来可以直连,中间插入一个C,C就是中介。
刚开始的时候,代理多数是帮助内网client访问外网server用的
后来出现了反向代理,"反向"这个词在这儿的意思其实是指方向相反,即代理将来自外网客户端的请求转发到内网服务器,从外到内

正向代理

YjOBO1.md.png

正向代理类似一个跳板机,代理访问外部资源

比如我们国内访问谷歌,直接访问访问不到,我们可以通过一个正向代理服务器,请求发到代理服,代理服务器能够访问谷歌,这样由代理去谷歌取到返回数据,再返回给我们,这样我们就能访问谷歌了

正向代理的用途:

  (1)访问原来无法访问的资源,如google

​ (2) 可以做缓存,加速访问资源

  (3)对客户端访问授权,上网进行认证

  (4)代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息

什么是反向代理?

YjOrex.md.png

YjOyTK.md.png

扫描二维码关注公众号,回复: 11254653 查看本文章

反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

反向代理的好处

1、保护了真实的web服务器,web服务器对外不可见,外网只能看到反向代理服务器,而反向代理服务器上并没有真实数据,因此,保证了web服务器的资源安全。

2、反向代理为基础产生了动静资源分离以及负载均衡的方式,减轻web服务器的负担,加速了对网站访问速度(动静资源分离和负载均衡)

3、节约了有限的IP地址资源,企业内所有的网站共享一个在internet中注册的IP地址(公网IP),这些服务器分配私有地址,采用虚拟主机的方式对外提供服务

**正向代理和反向代理(需要)的区别 **

1.区别在于形式上服务的”对象”不一样

2.正向代理代理的对象是客户端,为客户端服务

3.反向代理代理的对象是服务端,为服务端服务

fastcgi代理模块也是一种反向代理,代理的是PHP(服务端),nginx连接PHP,那么nginx就是一个客户端,用户通过浏览器访问nginx,那么用户就是客户端


nginx模块和代理服务

[Yjzmxe.md.png

nginx反向代理模块

ngx_http_proxy_module

[root@lb01 conf.d]# vim proxy.conf
server {
	listen 80;
	server_name b.zls.com;
	
	location / {
		proxy_pass http://172.16.1.7:80;
	}
}

#浏览器中指定的IP(解析后),访问代理机,代理机带着指定的IP去访问代理服务器
	这样返回的页面是第一个.conf中location / 中的默认页面,当然也可能返回404
	
server {
	listen 80;
	server_name b.zls.com;
	
	location / {
		proxy_pass http://172.16.1.7:80;
		proxy_set_header Host $host;
	}
}

#浏览器中指定的IP(解析后),访问代理机,代理机带着指定的域名(用户在浏览器中输入的IP)去访问代理服务器,返回指定的location中的内容

nginx日志打印客户端真实IP

使用proxy代理模块打印remote_addr(只记录上一级IP)

log_format  main  'lbIP$remote_addr - 用户$remote_user 本地时间[$time_local] "请求的方法和协议$request" '
                      '状态码$status 响应字节数$body_bytes_sent "从哪来$http_referer" '
                      '"浏览器配置$http_user_agent" --- "$http_x_real_ip"';

server {
	listen 80;
	server_name cs.ip.com;
	
	location / {
		proxy_pass http://10.0.0.7:80;
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr;
	}
}
#浏览器中指定的IP(解析后),访问代理机,代理机带着指定的域名(用户在浏览器中输入的IP)去访问代理服务器,返回指定的location中的内容,这样web服务器的日志只会记录上一级的代理的IP,不方便数据的分析

使用proxy代理模块打印http_x_forwarded_for(所有层级IP)

#服务端(web)
1.修改日志格式
nginx日志里面的分隔符随意,目的是区分输出的空格和原有的空格,| · ` `(特殊符号)不需要转义
#日志格式(log_format  main)
log_format  main  'lbIP$remote_addr - 用户$remote_user 本地时间[$time_local] "请求的方法和协议$request" '
                      '状态码$status 响应字节数$body_bytes_sent "从哪来$http_referer" '
                      '"浏览器配置$http_user_agent" --- "$http_x_forwarded_for";
#日志路径和指定格式                      
access_log  /var/log/nginx/access.log  main;
$remote_addr    #客户端访问网站之前使用的cdn(代理)的IP地址(或者服务端lb网关IP 或者自己网关的IP)(可以拼凑)
$http_x_forwarded_for	 #记录源客户端IP地址(记录从浏览器到web服务器这个过程的所有的IP,客户端的,代理机的,配合$http_x_real_ip $http_x_forwarded_for才能生效)

2.重载nginx配置文件
nginx -sreload

#代理机(外网IP)
server {
	listen 80;
	server_name cs.ip.com;
	
	location / {
	# 代理后端的机器(代理机或者代理服务器)
	proxy_pass http://10.0.0.7:80;
	# 客户端的请求头部信息,带着域名来找我,我也带着域名去找下一级(代理机或者代理服务器)
	proxy_set_header Host $host;
	# 显示客户端的真实ip(和代理的所有IP)
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	}
}

#浏览器中指定的IP(解析后),访问代理机,代理机带着指定的域名(用户在浏览器中输入的IP)去访问代理服务器,返回指定的location中的内容,这样web服务器的日志记录所有层级的代理的IP和客户端的IP

总结

  1. nginx服务器多重代理,代理机域名必须要相同
  2. $remote_addr日志中(头部)使用这个变量可以看到上一级的IP(只能看到上一级)
  3. $proxy_add_x_forwarded_for日志中(尾部)使用这个变量可以看到所有代理还有客户端的IP(从前2级代理开始显示)
  4. nginx反向代理,代理机代理谁 谁就是服务端
  5. 使用浏览器访问nginx多重代理使用的域名,和使用linux主机访问域名的结果不完全相同
  6. nginx服务端(web)可以通过配置不同域名的方式来指定提供不同的服务
  7. nginx日志中(尾部)添加"$http_x_real_ip",这样nginx日志才会显示尾部的IP
  8. nginx日志中(头部)添加$remote_addr,那么就可以通过日志中的头部IP判断出上一级的IP
  9. nginx日志中(尾部)添加"$http_x_forwarded_for",那么就可以通过nginx日志中头部和尾部,判断出nginx所有代理和nginx客户端的真实IP(nginx日志中不添加"$http_x_real_ip",server中的$proxy_add_x_forwarded_for也能打印出所有代理和客户端的IP)

作业:

​ 1.web01 web02 集群,共享数据库 共享nfs 详细步骤,总结一个文档

​ 2.代理,总结一个文档,做多级代理,查看xforwardfor日志

猜你喜欢

转载自www.cnblogs.com/syy1757528181/p/12944262.html
今日推荐