时间:2019/11/4
Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。
其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,
中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
国内有企业有哪些在使用nginx服务器:
国内使用Nginx的网站:新浪、网易、腾讯、CSDN、酷六、水木社区、豆瓣、六房间、小米等。
服务器
Web服务器专门处理HTTP请求,应用服务器通过各种协议来为客户端提供业务逻辑。以J2EE为例,Web服务器主要处理静态页面
部分web服务器作为Servlet容器,解释和执行servlet/JSP, 一般称之为轻量级应用服务器
而应用服务器主要运行业务逻辑,如EJB、 JNDI和JMX等J2EE API,还包含事物管理、数据库连接等功能。因此,在企业级应用中,应用服务器提供的功能比Web服务器强大得多。
Nginx优点
1.高并发连接:
官方测试能够支撑5万并发连接,在实际生产环境中跑到2~3万并发连接数。
2.内存消耗少:
在3万并发连接下,开启的10个Nginx 进程才消耗150M内存(15M*10=150M)。
3.配置文件非常简单:
风格跟程序一样通俗易懂。
4.成本低廉:
Nginx为开源软件,可以免费使用。而购买F5 BIG-IP、NetScaler等硬件负载均衡交换机则需要十多万至几十万人民币。
5.支持Rewrite重写规则:
能够根据域名、URL的不同,将 HTTP 请求分到不同的后端服务器群组。
6.内置的健康检查功能:
如果 Nginx Proxy 后端的某台 Web 服务器宕机了,不会影响前端访问。
7.节省带宽:
支持 GZIP 压缩,可以添加浏览器本地缓存的 Header 头。
8.稳定性高:
用于反向代理,宕机的概率微乎其微。
Nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率 。它支持内 核Poll模型,能经受高负载的考验,有报告表明能支持高达 50,000个并发连接数。 Nginx具有很高的稳定性,其它HTTP服务器当遇到访问的峰值,或者有人恶意发起慢速连接时,也很可能会导致服务器物理内存耗尽频繁交换,失去响应只能重启服务器。例如当前Apache一旦上到200个以上进程,web响应速度就明显非常缓慢了。而Nginx采取了分阶段资源分配技术,使得它的CPU与内存占用率非常低。Nginx官方表示保持 10,000个没有活动的连接,它只占2.5M内存,所以类似DOS这样的攻击对Nginx来说基本上是毫无用处的。就稳定性而言,nginx比lighttpd更胜一筹。 Nginx支持热部署,它的启动特别容易, 并且几乎可以做到7*24不间断运行,即使运 行数个月也不需要重新启动。你还能够在不间断服务的情况下,对软件版本进行进行升级。 Nginx采用master-slave模型,能够充分利用SMP的优势,且能够减少工作进程在磁 盘I/O的阻塞延迟。 Nginx代码质量非常高,代码很规范,手法成熟, 模块扩展也很容易。 Nginx采用了一些os提供的最新特性如对sendfile (Linux2.2+),accept-filter(FreeBSD4.1+),TCP_DEFER_ACCEPT (Linux 2.4+)的支持,从而大大提高了性 能。
环境搭建
官网下载地址:http://nginx.org/en/download.html
最新版本:http://nginx.org/download/nginx-1.17.5.tar.gz
步骤:
解压:
/usr/local:你的解压路径
1.进行安装:tar -zxvf nginx-1.16.1.tar.gz
tar -zxvf nginx-1.16.1.tar.gz -C /usr/local
2.下载所需要的依赖库文件:
yum install pcre -y
yum install pcre-devel -y
yum install zlib -y
yum install zlib-devel -y
注意:如果出现这个错误:./configure: error: C compiler cc is not found
执行这个命令:(没出现错误也执行一下,稳)
yum -y install gcc gcc-c++ autoconf automake make
3.进行configure配置,查看是否报错:编译前配置
cd /usr/local/nginx-1.16.1
./configure --prefix=/usr/local/nginx
4.编译安装:make && make install
cd /usr/local/nginx-1.16.1
make && make install
5.在 /usr/local/nginx目录下,可以看到如下4个目录
conf配置文件,html网页文件,logs日志文件,sbin主要二进制程序
6.启动命令:/usr/local/nginx/sbin/nginx
关闭命令:/usr/local/nginx/sbin/nginx -s stop
重启命令:/usr/local/nginx/sbin/nginx -s reload
7.可以使用netstat -ano| grep 80 查看端口.
ps -ef | grep nginx
8.访问浏览器:http://192.168.122.133(你的IP 命令ip addr可获取)(看到欢迎页面说明没问题)
关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
1.作为静态服务器,访问静态资源
案例:访问静态文件:demo1
demo1及之后的demo2下载链接:链接:https://pan.baidu.com/s/1gzRAVjPhtKEuV5WktEAEcw
提取码:14o3
1.将demo1放进某一目录下
2.进入Nginx安装目录的配置文件conf目录下
文本编辑器打开 nginx.conf配置文件,参考下图进行修改,编辑完后记得保存。
[root@bob demo1]# cd /usr/local/nginx/conf
[root@bob conf]# vi nginx.conf
#启动nginx
[root@bob conf]#/usr/local/nginx/sbin/nginx
下面配置可参考https://www.cnblogs.com/wuxianqiang/p/10705212.html
server {
listen 8080; //监听的端口号
server_name localhost; //用域名方式访问的地址
location / {
//项目路径 /usr/local/software/demo1
root /usr/local/software/demo1;
//项目默认访问首页 hello.html
index hello.html; }
}
server #虚拟主机:可以理解配置一个项目
listen #监听的端口
server_name #访问服务器域名 或者ip
location #匹配的路径
/ #映射路径
root #web根路径
index #默认的首页
访问http://你的ip:端口 ; 如: http://192.168.15.132:8080/看是否能访问成功。
访问结果
当静态资源被访问时,nginx能够处理,但当动态资源被访问时,nginx无法处理,解决方式是让nginx将动态资源请求转发到Tomcat处理。那么怎么实现呢,请看下面的栗子。
案例2:
将demo拖进linux路径
demo2中有一个静态资源static文件夹,一个后台项目的jar包,使用命令启动该项目
如图一:可以看到端口号是:8888;在浏览器中进行访问,结果如图二,这个访问是没有经过nginx直接访问的。
图一
图二
进入到nginx配置文件目录下
[root@bob nginx]# cd conf
使用编辑器打开nginx.conf,进行如下配置
测试:现在通过访问8080端口,让我们的访问经过nginx,结果如下
显然也能访问到
通过访问8080端口,让我们的访问经过nginx,访问一下静态资源看看
正向代理
由于某种需要要去访问国外的某些网站,此时你会发现位于国外的某网站我们通过浏览器是没有办法访问的,这时可以找到一个可以访问国外网站的代理服务器,将请求发送给代理服务器,代理服务器去访问国外的网站,然后将访问到的数据传递给我们
上述这样的代理模式称为正向代理,
正向代理最大的特点是客户端非常明确要访问的服务器地址;服务器只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户端;
反向代理
图解大家就可以看清楚了,多个客户端给服务器发送的请求,nginx服务器接收到之后,按照一定的规则分发给了后端的业务处理服务器进行处理了。此时~请求的来源也就是客户端是明确的,但是请求具体由哪台服务器处理的并不明确了,nginx扮演的就是一个反向代理角色
反向代理,主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息!
#设定负载均衡的服务器列表
#upstream myproject {
#weigth参数表示权值,权值越高被分配到的几率越大
#max_fails 当有#max_fails个请求失败,就表示后端的服务器不可用,默认为1,将其设置为0可以关闭检查
#fail_timeout 在以后的#fail_timeout时间内nginx不会再把请求发往已检查出标记为不可用的服务器
#}
#webapp
upstream myapp {
server 192.168.122.133:8080 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.122.134:8080 weight=1 max_fails=2 fail_timeout=30s;
}
http 这个模块下配置
upstream myapp {
server 127.0.0.1:8888 weight=1 max_fails=2 fail_timeout=30s;
server 127.0.0.1:9999 weight=1 max_fails=2 fail_timeout=30s;
}
server模块下配置
location / {
proxy_pass http://myapp;
proxy_set_header X-real-ip $remote_addr;
}
负载均衡实现手段
1)使用硬件负载均衡策略,如使用F5,Array等负载均衡器.
2)使用软件进行负载均衡
3)如使用阿里云服务器均衡SLB
4)使用我们今天所学习的Nginx+Keepalived
5)其他软件负载均衡如LVS(Linux Virtual Server),haproxy等技术
负载均衡策略
nginx 目前支持 4 种方式的分配
1)、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2)、weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
2)、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
3)、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
4)、url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
案例:
依旧是使用demo2
改变端口号(之前端口是8888),再开启一个项目
打开配置文件进行配置(在修改配置文件前最好使用cp命令备份一份)
虚拟主机配置
实现目标:原本是使用ip进行访问:http://192.168.15.132:8080/iptest
现在使用域名也能进行访问:http://www.huawuque.crm.com/iptest
nginx虚拟主机配置:
3种方式:
1>居于ip的虚拟主机(基本不用)
2>居于域名的虚拟主机
3>居于端口的虚拟主机
修改:真实开发中, 必须申请域名绑定ip
测试: 使用假域名, 虚拟域名:
1.linux:
#域名和ip绑定
vi /etc/hosts
127.0.0.1 www.xiaoyuer.crm.com
127.0.0.1 www.huawuque.crm.com
2.修改完后重新启动
/etc/init.d/network restart(某些电脑使用这条命令会出问题,用下面这条解决)
reboot
3.windows 做修改
找到C:\Windows\System32\drivers\etc路径下的hosts文件(文件后缀先忽略不管)
window:
192.168.168.132 www.xiaoyuer.crm.com
192.168.168.132 www.huawuque.crm.com
粘贴进来 目的:使本地DNS能够解析这两个域名
4.nginx配置文件配置
编辑完后,记得保存退出。
日志文件
nginx访问日志放在log/host.access.log下,并且使用main格式(支持自定义格式)
对于main格式配置如下:
#日志文件输出格式这个位置相当于全局设置
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
#'$status $body_bytes_sent "$http_referer" '
#'"$http_user_agent" "$http_x_forwarded_for"';
192.168.168.1 - - [03/Oct/2019:09:58:17 -0400] “GET /favicon.ico HTTP/1.1” 200 946 “http://www.dafei.crm.com/iptest” “Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36”
针对某个server的日志记录
#access_log logs/access.log main;
查看日志内容命令:tail -n 100 -f access.log
nginx日志保存位置: 可以使用cat命令打开access.log文件看一下
日志文件的切割
系统运行起来之后,我们需要对nginx日志的分析,得到响应耗时的url,请求时间,以及这段时间的请求量和并发量.通过分析找到优化系统的方案.所以需要运维人员对nginx的日志进行切割和分析处理.我们会通过定时器定时将日志按天/小时进行备份.
思路:假如每天的日志都保存为一份日志文件,首先需要创建一个文件夹保存这些日志文件。然后创建一个shell脚本,脚本执行代码就是在一天后将nginx默认保存日志的日志文件拷贝一份到我们创建日志保存文件夹中,然后清空该日志文件。然后设置每过一天执行这个脚本。
实现定时备份日志:<按下述步骤执行>
第一步:分析如何去实现日志切分,编写shell脚本.
创建一个目录保存日志文件
cd /usr/local/nginx
mkdir datalogs
cd /usr/local/nginx/sbin/
vi logbak.sh
脚本文件模板
#!/bin/sh
BASE_DIR=/usr/local/nginx
BASE_FILE_NAME=access.log
CURRENT_PATH=$BASE_DIR/logs
BAK_PATH=$BASE_DIR/datalogs
CURRENT_FILE=$CURRENT_PATH/$BASE_FILE_NAME
BAK_TIME=`/bin/date -d yesterday +%Y%m%d%H%M`
BAK_FILE=$BAK_PATH/$BAK_TIME-$BASE_FILE_NAME
mv $CURRENT_FILE $BAK_FILE
$BASE_DIR/sbin/nginx -s reopen
chmod 755 logbak.sh
注意:将脚本从window拷贝到linux,执行脚本的时候可能会出现$’\r’: command not found,需要转换一下格式:
yum install dos2unix -y
dos2unix 脚本文件
第二步:定时任务对脚本进行调度
定时保存日志,比如一天的日志保存为一份日志文件。
定时执行脚本文件,实现日志的定期保存。
可参考https://blog.51cto.com/mrxiong2017/2084803
crontab -e
* */1 * * * sh /usr/local/nginx/sbin/logbak.sh 小时
*/1 * * * * sh /usr/local/nginx/sbin/logbak.sh 分钟
以上日志就配置好了,可以过一分钟看看datalogs目录下有没有新增的日志文件
所有配置 看看配置文件有什么东西
#user nobody;
#开启进程数 <=CPU数 worker_processes 1;
#错误日志保存位置
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;#进程号保存文件
#pid logs/nginx.pid;#每个进程最大连接数(最大连接=连接数x进程数)每个worker允许同时产生多少个链接,默认1024 events {
worker_connections 1024; }http { #文件扩展名与文件类型映射表
include mime.types; #默认文件类型
default_type application/octet-stream;#日志文件输出格式 这个位置相于全局设置
log_format main '$remote_addr - r e m o t e u s e r [ remote_user [ remoteuser[time_local] “KaTeX parse error: Double superscript at position 34: … '̲status b o d y b y t e s s e n t " body_bytes_sent " bodybytessent"http_referer” ’
‘“ h t t p u s e r a g e n t " " http_user_agent" " httpuseragent""http_x_forwarded_for”’;#请求日志保存位置
#access_log logs/access.log main; #打开发送文件
sendfile on;
#tcp_nopush on;#keepalive_timeout 0; #连接超时时间 keepalive_timeout 65;
#打开gzip压缩
#gzip on; #设定请求缓冲 #client_header_buffer_size 1k; #large_client_header_buffers 4 4k; #设定负载均衡的服务器列表 #upstream
myproject { #weigth参数表示权值,权值越高被分配到的几率越大 #max_fails
当有#max_fails个请求失败,就表示后端的服务器不可用,默认为1,将其设置为0可以关闭检查 #fail_timeout
在以后的#fail_timeout时间内nginx不会再把请求发往已检查出标记为不可用的服务器 #}#webapp #upstream myapp { # server 192.168.122.133:8080 weight=1 max_fails=2 fail_timeout=30s; # server 192.168.122.134:8080
weight=1 max_fails=2 fail_timeout=30s;
#}#配置虚拟主机,基于域名、ip和端口
server { #监听端口
listen 80; #监听域名
server_name localhost;#charset koi8-r; #nginx访问日志放在logs/host.access.log下,并且使用main格式(还可以自定义格式) #access_log logs/host.access.log main; #返回的相应文件地址 location / { #设置客户端真实ip地址 #proxy_set_header X-real-ip $remote_addr; #负载均衡反向代理 #proxy_pass http://myapp; #返回根路径地址(相对路径:相对于/usr/local/nginx/) root html; #默认访问文件 index index.html index.htm; } #配置反向代理tomcat服务器:拦截.jsp结尾的请求转向到tomcat #location ~ \.jsp$ { # proxy_pass http://192.168.122.133:8080; #} #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # #错误页面及其返回地址 error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} } #虚拟主机配置: server { listen 1234; server_name wolfcode.cn; location / { #正则表达式匹配uri方式:在/usr/local/nginx/wolfcode.cn下
建立一个test123.html 然后使用正则匹配 #location ~ test { ## 重写语法:if return
(条件 = ~ ~) #if (KaTeX parse error: Expected '}', got '#' at position 35: …68.122.1) { #̲ return 4…http_user_agent ~ firefox) { # rewrite ^.*$ /firefox.html; # break; #}
root wolfcode.cn; index index.html; }
#location /goods { # rewrite “goods-(\d{1,5}).html” /goods-ctrl.html; # root wolfcode.cn; # index index.html; #}
#配置访问日志 access_log logs/wolfcode.cn.access.log main; }# another virtual host using mix of IP-, name-, and port-based configuration # #server { # listen 8000; # listen somename:8080; # server_name somename alias another.alias; # location / { # root html; # index index.html index.htm; # } #} # HTTPS server # #server { # listen 443 ssl; # server_name localhost; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # location / { # root html; # index index.html index.htm; # } #}
}
语法规则: location [=||*|^~] /uri/ { … }
= 开头表示精确匹配
^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。 ^~/static/
~ 开头表示区分大小写的正则匹配
~ * 开头表示不区分大小写的正则匹配
** !~和 !~*分别为区分大小写不匹配及不区分大小写不匹配 的正则
/ 通用匹配,任何请求都会匹配到。
首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。
$ 表示以什么什么结尾
可参考 https://www.jianshu.com/p/403bab8fc34d
匹配规则
location = / {
#规则A
}
location = /login {
#规则B
}
location ^~ /static/ {
#规则C
}
location ~ .(gif|jpg|png|js|css)$ {
#规则D
}
location ~* .png$ {
#规则E
}
location !~ .xhtml$ {
#规则F
}
location !~* .xhtml$ {
#规则G
}
location / {
#规则H
}
那么产生的效果如下:
访问根目录/, 比如http://localhost/ 将匹配规则A
访问 http://localhost/login 将匹配规则B,http://localhost/register 则匹配规则H
访问 http://localhost/static/a.html 将匹配规则C
访问 http://localhost/a.gif, http://localhost/b.jpg 将匹配规则D和规则E,但是规则D顺序优先,规则E不起作用,而 http://localhost/static/c.png 则优先匹配到 规则C
访问 http://localhost/a.PNG 则匹配规则E, 而不会匹配规则D,因为规则E不区分大小写。
访问 http://localhost/a.xhtml 不会匹配规则F和规则G,http://localhost/a.XHTML不会匹配规则G,因为不区分大小写。规则F,规则G属于排除法,符合匹配规则但是不会匹配到,所以想想看实际应用中哪里会用到。
访问 http://localhost/category/id/1111 则最终匹配到规则H,因为以上规则都不匹配,这个时候应该是nginx转发请求给后端应用服务器,比如FastCGI(php),tomcat(jsp),nginx作为方向代理服务器存在。
实际应用配置
#直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,官网如是说。
#这里是直接转发给后端应用服务器了,也可以是一个静态首页
location = / {
proxy_pass http://tomcat:8080/index
}
#第二个必选规则是处理静态文件请求,这是nginx作为http服务器的强项
#有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用
location ^~ /static/ {
root /webroot/static/;
}
location ~* .(gif|jpg|jpeg|png|css|js|ico|html)$ {
root /webroot/res/;
}
#第三个规则就是通用规则,用来转发动态请求到后端应用服务器
#非静态文件请求就默认是动态请求,自己根据实际把握
#毕竟目前的一些框架的流行,带.php,.jsp后缀的情况很少了
location / {
proxy_pass http://tomcat:8080/
}
全局变量 看看有哪些全局变量
官方配置:http://nginx.org/en/docs
$args #请求中的参数值
$query_string #同 $args
$arg_NAME #GET请求中NAME的值
$is_args #如果请求中有参数,值为"?",否则为空字符串
KaTeX parse error: Expected 'EOF', got '#' at position 11: uri #̲请求中的当前URI(不带请求参…args),可以不同于浏览器传递的 r e q u e s t u r i 的 值 , 它 可 以 通 过 内 部 重 定 向 , 或 者 使 用 i n d e x 指 令 进 行 修 改 , request_uri的值,它可以通过内部重定向,或者使用index指令进行修改, requesturi的值,它可以通过内部重定向,或者使用index指令进行修改,uri不包含主机名,如"/foo/bar.html"。
$document_uri #同 $uri
$document_root #当前请求的文档根目录或别名
$host #优先级:HTTP请求行的主机名>“HOST"请求头字段>符合请求的服务器名
$hostname #主机名
$https #如果开启了SSL安全模式,值为"on”,否则为空字符串。
$binary_remote_addr #客户端地址的二进制形式,固定长度为4个字节
$body_bytes_sent #传输给客户端的字节数,响应头不计算在内;这个变量和Apache的mod_log_config模块中的"%B"参数保持兼容
$bytes_sent #传输给客户端的字节数
$connection #TCP连接的序列号
$connection_requests #TCP连接当前的请求数量
$content_length #“Content-Length” 请求头字段
$content_type #“Content-Type” 请求头字段
$cookie_name #cookie名称
$limit_rate #用于设置响应的速度限制
$msec #当前的Unix时间戳
$nginx_version #nginx版本
$pid #工作进程的PID
$pipe #如果请求来自管道通信,值为"p",否则为"."
$proxy_protocol_addr#获取代理访问服务器的客户端地址,如果是直接访问,该值为空字符串
$realpath_root #当前请求的文档根目录或别名的真实路径,会将所有符号连接转换为真实路径
$remote_addr #客户端地址
$remote_port #客户端端口
$remote_user #用于HTTP基础认证服务的用户名
$request #代表客户端的请求地址
$request_body #客户端的请求主体:此变量可在location中使用,将请求主体通过proxy_pass,fastcgi_pass,uwsgi_pass和scgi_pass传递给下一级的代理服务器
$request_body_file #将客户端请求主体保存在临时文件中。文件处理结束后,此文件需删除。如果需要之一开启此功能,需要设置client_body_in_file_only。如果将次文件传递给后端的代理服务器,需要禁用request body,即设置proxy_pass_request_body off,fastcgi_pass_request_body off,uwsgi_pass_request_body off,or scgi_pass_request_body off
$request_completion #如果请求成功,值为"OK",如果请求未完成或者请求不是一个范围请求的最后一部分,则为空
$request_filename #当前连接请求的文件路径,由root或alias指令与URI请求生成
$request_length #请求的长度 (包括请求的地址,http请求头和请求主体)
$request_method #HTTP请求方法,通常为"GET"或"POST"
$request_time #处理客户端请求使用的时间; 从读取客户端的第一个字节开始计时
KaTeX parse error: Expected 'EOF', got '#' at position 24: …uri #̲这个变量等于包含一些客户端请求…uri更改或重写URI,不包含主机名,例如:"/cnphp/test.php?arg=freemouse"
$scheme #请求使用的Web协议,“http” 或 “https”
$server_addr #服务器端地址,需要注意的是:为了避免访问linux系统内核,应将ip地址提前设置在配置文件中
$server_name #服务器名
$server_port #服务器端口
$server_protocol #服务器的HTTP版本,通常为 “HTTP/1.0” 或 “HTTP/1.1”
$status #HTTP响应代码
$time_iso8601 #服务器时间的ISO 8610格式
$time_local #服务器时间(LOG Format 格式)
KaTeX parse error: Expected 'EOF', got '#' at position 19: …kie_NAME #̲客户端请求Header头中的c…cookie_"加上cookie名称的变量,该变量的值即为cookie名称的值
KaTeX parse error: Expected 'EOF', got '#' at position 20: …_NAME #̲匹配任意请求头字段;变量名中的…http_accept_language即可
$http_cookie #cookie 信息
$http_post
$http_referer #引用地址
$http_user_agent #客户端代理信息
$http_x_forwarded_for#相当于网络访问路径。http://www.cnblogs.com/craig/archive/2008/11/18/1335809.html
KaTeX parse error: Expected 'EOF', got '#' at position 21: …http_NAME #̲可以设置任意http响应头字段…sent_http_content_length即可
$sent_http_cache_control
$sent_http_connection
$sent_http_content_type
$sent_http_keep_alive
$sent_http_last_modified
$sent_http_location
$sent_http_transfer_encoding
rewrite语法
作用:
1:url访问跳转, 支持开发设置
1>页面跳转 2>兼容性支持 3>展示效果等
2>SEO优化
3>维护
后台维护, 流量转发等
eg: rewrite ^(.*)$ /维护页面.html
4>安全
url 隐藏
格式:rewrite regex replaceent [flag]
regex 匹配的正则表达式,将伪装的静态url转化为动态的url,然后通过proxy_pass跳转到真实路径访问
repaceent:用于真实url拼接
flag
last 相当于Apache里的[L]标记,表示完成rewrite,这应该是最常用的
break 终止匹配, 不再匹配后面的规则
redirect 返回302临时重定向 地址栏会显示跳转后的地址
permanent 返回301永久重定向 地址栏会显示跳转后的地址
为什么需要伪静态化百度一下
目的:
原本使用
http://ip:8888/employee/page?pageSize=3¤tPage=1
进行访问
转换成:
http://ip:8888/employee-page-3-1.html
这样别人就不能轻易看出get请求带的参数名了
实现;这里还是用的的demo2
打开 nginx配置文件,进行如下配置
server {
listen 80;
server_name localhost;
location ^~ /employee {
rewrite ^/employee-(.*)-(\d*)-(\d*).html$ /employee/$1?pageSize=$2¤tPage=$3 break;
proxy_set_header X-real-ip $remote_addr;
proxy_pass http://192.168.15.132:8888;
}
}
如图:
因为设置端口为80,所以直接使用http://192.168.15.132/employee-page-3-1.html访问即可;结果如下:
搭建高可用环境
我们是通过Nginx进行反向代理,如果Nginx关了的话就没有其他服务支撑.
所以我们需要来实现Nginx的高可用,高可用就是我们一台机器挂了可以切换到另外一台机器.
我们使用Nginx+keepalived搭建高可用环境
高可用双机热备(主从模式/双主模式)
http://www.uml.org.cn/zjjs/201808214.asp