NIGINX 中的location上下文的参数详解及用法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NIGINX 中的location上下文的参数详解及用法相关的知识,希望对你有一定的参考价值。
nginx中只支持三种请求转发方式:
round-robin(轮流调度方式):它是把客户端流量请求依次按顺序分发给每个后端服务器。缺点是:会出现某个服务器已经在 处理很多的请求而再有新的请求进来,nginx代理服务器还是会给它分发流量进来,这会导致服务器down掉。
ip_hash ( ip哈希方式 ) : 它是把访问的客户端ip进行哈希加密计算后,存到hash表里。它的工作原理是当你访问过一次后,我会记住你访问的是哪个服务器,当你 再次发送请求过来我会自动连接你第一次连接过的服务器,除非你改变了ip.
least_conn ( 最少连接方式 ) :它解决了轮流方式的弊端,它是根据哪个服务器连接的客户端请求数最少去连接谁。缺点是:可能会发生突发性访问完后使其down掉。
nginx反向代理中的自检机制:
这种机制会随时不断的检查代理的后端服务器是否工作正常,相应的设置参数如下:
max_fails=3(最大失败连接次数,默认是1)
fail_timeout=2(失败连接的超时时长)
backup(加上它是只有当可用的服务器全部down掉,才会启用本服务器,一般用于提示客户端服务器在维护中...)
down(它是自定义停掉某一台服务器)
nginx代理服务器的权重设置:
weight=1 ;(数字越大权重越大)
加上它是让某个服务器多处理一些请求任务,多劳多得。谁的配置高谁就设置的权重大一些。
如何正确获取客户端的ip地址?
在代理服务器的子配置文件中的location 上下文中添加这句话
proxy_set_header X-client-IP $remote_addr ;
X-Real-IP(这个是自己定义的变量名字)
整句话的意思是把系统变量值传给自己定义的变量。
在后端服务器中的主配置文件中找到Format日志格式配置哪一行添加自己的变量 进去,按照人家给定的格式写。
LogFormat "%{X-client-IP}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
- 如何对某个网页内容进行设置访问用户名和密码?
生产场景描述: 当有些网页内容是公司内部的某些人才能访问时,我们可以这样 做。
在代理服务器的子配置文件中的location 上下文中添加这句话
auth_basic "这里写啥都可以,作用是提示用户输入啥信息"
auth_basic_user_file /data/auth.conf;
在后端服务器上
[[email protected] ~]# htpasswd -cm /data/auth_conf user1
/data/auth_conf(文件名)user1(用户名)
如果是在增加一个新的对此网页的访问只需要把-c去掉即可
nginx 实现反向代理案例1:
[[email protected] conf.d]# vim /etc/nginx/conf.d/web.conf
upstream webservers{
server 10.18.42.156:80; 这是后端服务器
server 10.18.42.153:80; 这是后端服务器
}
webservers这个名字随便起。
在后端服务器上要提前设置好它们的网页内容。
server{
listen 8080;
servername ;
location / {
root /webdata;
index index.html index.php;
proxy_pass http://webservers; proxy_pass这个是代理的关键字
}
}
nginx 实现反向代理案例2:
webservers{
server 10.18.42.156:80; 这个是php网页
server 10.18.42.153:80; 这个是html网页
}
server{
listen 8080;
servername ;
location / {
root /webdata;
index index.html index.php;
}
location ~* ".php$" {
proxy_pass http://webservers;
}
}
注意观察两次实验得出的结论是:location 是你访问时的匹配规则,你匹配到哪个就执行哪个里面的代码块。
nginx 实现反向代理案例3:
[[email protected] conf.d]# vim /etc/nginx/conf.d/web.conf
upstream webservers{
ip_hash;
server 10.18.42.156:80 max_fails=3 fail_timeout=2;
server 10.18.42.153:80 max_fails=3 fail_timeout=2;
server 10.18.42.157 backup; 这个是只有当上面的所有服务器都down掉后,它 才提供服务,一般只是显示一个友好提示:服务器维护中..........
}
server{
listen 8080;
upstream webservers{
ip_hash; 这个是定义调度方式
server 10.18.42.156:80 max_fails=3 fail_timeout=2; 这个是自检规则
server 10.18.42.153:80 max_fails=3 fail_timeout=2 down; 这个是手动停掉本 台服务器。
}
server{
listen 8080;
servername ;
location / {
root /webdata;
index index.html index.php;
}
location ~* ".php$" {
proxy_pass http://webservers;
}
}
nginx 实现反向代理案例3:
upstream webservers{
ip_hash;
server 10.18.42.156 weight=1; 这是权重设置数字越大处理的请求数越多。
server 10.18.42.153 weight=2;
}
server{
listen 8080;
servername ;
location / {
root /webdata;
index index.html index.php;
}
location ~* ".php$" {
proxy_pass http://webservers;
}
}
nginx 中的关于如何获取客户端ip地址信息的设置方法实例4:
第一步:在代理服务器的子配置文件中设置变量参数
upstream webservers{
ip_hash;
server 10.18.42.156 weight=1;
server 10.18.42.153 weight=2;
}
server{
listen 8080;
servername ;
location / {
root /webdata;
index index.html index.php;
}
location ~* ".php$" {
proxy_pass http://webservers;
proxy_set_header X-client-IP $remote_addr ; 红字是关键字,中间是自 己定义的变量名
}
}
第二步:
在后端服务器中的主配置文件中找到Format日志格式配置哪一行添加自己的变量 进去,按照人家给定的格式写。
/etc/httpd/conf/httpd.conf
LogFormat "%{X-client-IP}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
关于反向代理中的访问路径的字符匹配问题详细说明:
第一种是没有匹配符的访问路径
location / {
root /webdata;
index index.html index.php;
proxy_psaa http://10.18.42.10;
}
这种情况下ip地址后面加上路径在访问的时候回自动把访问路径加到后面,为了避免这种错误。所以这种不加任何匹配符的情况下,ip地址后面必须写明网页的确切路径。
第二种情况是加了匹配符的访问路径
location ~* ".php$" {
proxy_pass http://webservers;
proxy_set_header X-client-IP $remote_addr ;
}
这种情况下添加了匹配符,那么访问ip地址后面绝对不能添加任何路径或其他东西。
nginx 实现反向代理关于访问权限案例5:
在代理服务器上输入下面命令:
[[email protected] ~]# htpasswd -cm /passwd user1
/passwd 这个是存放密码和用户名的文件
user1 这个是要创建的用户名
进到字配置文件中设置如下:
location ~* ".php$" {
proxy_pass http://webservers;
proxy_set_header X-client-IP $remote_addr ;
auth_basic "请输入您的用户名及密码";
auth_basic_user_file /passwd;
}
这样当我们在去访问.php的网页时,客户端会提示我们输入用户名和密码,否则看不得网页内容。
以上是关于NIGINX 中的location上下文的参数详解及用法的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 apache http 服务器中 Location 标记中的上下文路径删除 url 中的空参数