15.1、nginx介绍:

1、Nginx是一个开源,支持高性能,高并发的www服务和代理服务软件,由俄罗斯人开发,是开源的,nginx因具有高并发(特别是静态的

资源)、占用系统资源少等特性,且功能丰富逐渐流行起来;

2、Nginx不但是一个优秀的web服务软件,还可以具有反向代理(正向代理:内部-外部;反向代理:外部-内部)负载均衡功能和缓存服务功能,

在反向代理负载均衡功能方面,他类似于大名鼎鼎的lvs以及haproxy专业代理软件,但是nginx部署起来更为简单,方便;在缓存服务功能方面,

它类似于squid等专业缓存服务软件;

3、Nginx可以使用在window上,也可以使用在linux,unix上;

15.2、Nginx的重要特性:

可针对静态资源高速高并发访问及缓存;

可使用反向代理加速,并且可进行数据维护;

具有简单的负载均衡、节点健康检查和容错功能;

支持远程fastCGI服务的缓存加速;

支持SSL、TLS、SNI;

支持基于名字、端口及ip的多虚拟主机站点;

支持keep-alive和pipelined连接;

可进行简单、方便、灵活的配置和管理;

支持修改nginx配置,并且在代码上线是,可以平滑重启,不中断业务的访问;

可自定义访问日志格式,临时缓冲写日志操作,快速日志轮训及通过rsyslog处理日志;

可利用信号控制nginx进程;

支持3xx-5xx http状态码重定向;

支持rewrite模块,支持uri重写及正则表达式匹配;

支持客户端ip地址和http基本认证访问控制;

支持flv流和mp4流技术产品应用;

支持http相应速率限制;

支持同一ip地址的并发连接或请求数限制;

采用的是异步模型;

15.3、Ngix作为web服务器的主要应用场景:

使用nginx运行HTML、js、css、小图片等静态数据(此功能类似于apach;apach并发:4-6k;php并发:1000;db并发:几百;lighttpd软件);

nginx结合fastCGI运行php等动态程序(列如使用fastcgi_pass方式);

nginx结合Tomcat/resin等支持java动态程序(常用proxy_pass方式);

15.4、nginx、apach、lighttpd之间的区别:

1、apach:

市场份额一直在减少;

2、nginx:

3、lighttpd:

15.5、nginx、apach、lighttpd的select模型和epoll模型:

15.6、nginx、apach、lighttpd的使用场景:

15.7、nginx的编译安装:

https://opsx.alibaba.com/mirror

wget:选择yum的镜像地址(点击帮助)wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo;

http://nginx.org/ #nginx的官网;

1、安装pcre:

pcre中文简称“perl兼容正则表达式”,安装pcre库可以为nginx支持具备url重写功能的rewrite的功能;

[root@web01 ~]# yum install pcre pcre-devel -y

[root@web01 ~]# rpm -qa pcre pcre-devel

pcre-7.8-7.el6.x86_64

pcre-devel-7.8-7.el6.x86_64

2、安装openssl openssl-devle:

[root@web01 ~]# yum install openssl openssl-devel -y

[root@web01 ~]# rpm -qa openssl openssl-devel

openssl-1.0.1e-57.el6.x86_64

openssl-devel-1.0.1e-57.el6.x86_64

3、安装nginx:

[root@web01 ~]# mkdir tools -p

[root@web01 tools]# wget http://nginx.org/download/nginx-1.8.1.tar.gz #复制nginx的链接地址在linux中进行安装:

[root@web01 tools]# tar -xzvf nginx-1.8.1.tar.gz

[root@web01 ~]#mkdir -p /application/

[root@web01 nginx-1.8.1]# pwd

/root/tools/nginx-1.8.1

[root@web01 nginx-1.8.1]# useradd -Ms /sbin/nologin nginx

[root@web01 nginx-1.8.1]# ./configure --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --prefix=/application/nginx-1.8.1

#安装https模块,安装nginx状态模块,指定安装目录;

[root@web01 nginx-1.8.1]#make #编译

[root@web01 nginx-1.8.1] echo $? #编译是否完成;

[root@web01 nginx-1.8.1]#make install #安装

[root@web01 application]# pwd

/application

[root@web01 application]# ln -s nginx-1.8.1/ nginx #创建软链接,方便以后软件升级;

[root@web01 ~]# /application/nginx/sbin/nginx -t #检查配置文件语法是否正确;

nginx: the configuration file /application/nginx-1.8.1/conf/nginx.conf syntax is ok

nginx: configuration file /application/nginx-1.8.1/conf/nginx.conf test is successful

[root@web01 application]# /application/nginx/sbin/nginx #启动ngix服务

[root@web01 application]# netstat -tunlp | grep nginx #查看nginx服务;

tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 11826/nginx

[root@web01 ~]# /application/nginx/sbin/nginx -V #查看nginx的版本号和编译时所用的参数;

nginx version: nginx/1.8.1

built by gcc 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)

built with OpenSSL 1.0.1e-fips 11 Feb 2013

TLS SNI support enabled

configure arguments: --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --prefix=/application/nginx-1.8.1

4、访问网站:

5、nginx启动错误总结:

nginx:[emerg] getpwnam("nginx") failed :

这是因为没有对应的nginx服务用户所致,执行useradd -sM /sbin/nologin nginx 创建用户即可;

[root@web01 ~]# yum grouplist #必装

15.8、nginx配置参数详解:

[root@web01 nginx]# tree

.

├── client_body_temp

├── conf #nginx所有的配置文件目录,非常重要;

│ ├── fastcgi.conf

│ ├── fastcgi.conf.default

│ ├── fastcgi_params #与php交流时的fastcgi配置参数,一般用不到;

│ ├── fastcgi_params.default

│ ├── koi-utf

│ ├── koi-win

│ ├── mime.types #媒体类型配置文件

│ ├── mime.types.default

│ ├── nginx.conf #nginx配置文件

│ ├── nginx.conf.default #nginx配置文件的备份

│ ├── scgi_params

│ ├── scgi_params.default

│ ├── uwsgi_params

│ ├── uwsgi_params.default

│ └── win-utf

├── fastcgi_temp #fastcgi的临时目录;

├── html #html的存放目录;

│ ├── 50x.html #错误的html;

│ └── index.html #首页;

├── logs #日志目录

│ ├── access.log #访问日志;

│ ├── error.log #错误日志;

│ └── nginx.pid #nginx的进程号

├── proxy_temp

├── sbin #启动目录

│ └── nginx #启动文件

├── scgi_temp

└── uwsgi_temp

1、nginx配置文件:

[root@web01 conf]# pwd

/application/nginx/conf

2、清除配置文件中的空行和注释:

[root@web01 conf]# egrep -v "^$|#" nginx.conf.default >nginx.conf #去掉包含#号和空行的内容;

3、nginx配置文件详解:

[root@web01 conf]# cat nginx.conf

worker_processes 1; #worker进程数量,一般和cpu的核数相当;

events { #事件区(核心模块)块开始;

worker_connections 1024; #每个worker进程支持的最大并发连接数;

} #事件区块结束

http { #http区块开始

include mime.types; #nginx支持的媒体类型库文件包含(include表示包含的配置文件);

default_type application/octet-stream; #nginx支持的默认媒体库类型;

sendfile on; #开启高效传输模式;

keepalive_timeout 65; #连接超时;

server { #网站配置第一个server区块 开始,可以配置多个server;

listen 80; #网站监听的端口号,默认是80;

server_name www.web01.com; #网站域名;

location / { #“/”是nginx的安装目录, 即是 /application/nginx/ 目录;

root html; #存放html文件的目录,即是/application/nginx/html/ 目录;

index index.html index.htm; #是指当你属于网站的域名而不输入具体的文件名时所显示的html首页,如果没有首页会报403权限错误,需要改首页的名字和配置一致;

}

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

} #网站配置第一个server区块结束;

}

[root@web01 nginx]# /application/nginx/sbin/nginx -t #修改配置文件后,检查语法是否存在错误;

nginx: the configuration file /application/nginx-1.8.1/conf/nginx.conf syntax is ok

nginx: configuration file /application/nginx-1.8.1/conf/nginx.conf test is successful

[root@web01 nginx]# /application/nginx/sbin/nginx -s reload#优雅的重启 ;

4、访问:

(1)在windows系统的hosts文件添加如下一行内容,方便解析:

172.16.1.8 www.web01.com

(2)在浏览器中进行访问:

15.9、nginx的模块配置:

nginx核心模块(http://nginx.org/en/docs/ngx_core_module.html)#events:

nginx核心功能模块负责nginx的全局应用,主要对应Main区块和Events区块区域;

nginx的http模块:

[root@web01 nginx-1.8.1]# ./configure --help #查看帮助,里面有所需要的http模块

1、虚拟主机介绍:

所谓虚拟主机,在web服务里就是一个独立的网站站点,这个站点对应独立的域名(也可能是ip或者是端口号),

具有独立的程序及资源目录,可以独立的对外提供服务供用户访问。这个独立的站点在配置里是有一定的格式标签段

标记,nginx使用一个server{}标签来标示一个虚拟主机,一个web服务里可以有多个虚拟主机标签对,即同时可以支持

多个虚拟主机站点。

2、基于域名的虚拟主机:

通过不同的域名区分不同的虚拟主机,基于域名的虚拟主机是企业应用最广的虚拟主机类型,几乎所有对外提供服

务的网站都是使用基于域名的虚拟主机;

(1)nginx.conf配置文件:

[root@web01 nginx]# cat conf/nginx.conf

worker_processes 1;

events {

worker_connections 1024;

}

http {

include mime.types;

default_type application/octet-stream;

sendfile on;

keepalive_timeout 65;

server {

listen 80;

server_name lc.web01.com;

location / {

root html/lc;

index lc.html;

}

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

}

server {

listen 80;

server_name lc1.web01.com;

location / {

root html/lc1;

index lc1.html;

}

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

}

}

[root@web01 html]# mkdir -p {lc1,lc} #创建虚拟目录;

[root@web01 lc]# echo "hello i am is lc" >lc.html

[root@web01 lc1]# echo "hello i am is lc1" >lc1.html

[root@web01 nginx]# sbin/nginx -t

nginx: the configuration file /application/nginx-1.8.1/conf/nginx.conf syntax is ok

nginx: configuration file /application/nginx-1.8.1/conf/nginx.conf test is successful

[root@web01 nginx]# sbin/nginx -s reload

[root@web01 conf]# netstat -tunlp | grep nginx

tcp 0 0.0.0.0:80 0.0.0.0:* LISTEN 1559/nginx

(2)访问:

在windows系统的hosts文件添加如下内容,方便解析:

#解决windos7 hosts文件权限不够的方法:附件——记事本——右键以管理员运行——打开hosts文件

172.16.1.8 lc.web01.com lc1.web01.com

3、基于端口的虚拟 主机:

通过不同的端口号来区分不同的虚拟主机,此类虚拟主机对应的企业应用主要是为公

司的内部网站,列如一些不希望直接对外提供用户访问的网站后台等,访问基于端口的

虚拟主机地址要带端口号;

(1)nginx.conf配置文件:

[root@web01 nginx]# cat conf/nginx.conf

worker_processes 1;

events {

worker_connections 1024;

}

http {

include mime.types;

default_type application/octet-stream;

sendfile on;

keepalive_timeout 65;

server {

listen 81;

server_name lc.web01.com;

location / {

root html/lc;

index lc.html;

}

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

}

server {

listen 82;

server_name lc1.web01.com;

location / {

root html/lc1;

index lc1.html;

}

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

}

}

[root@web01 conf]# /application/nginx/sbin/nginx -t

nginx: the configuration file /application/nginx-1.8.1/conf/nginx.conf syntax is ok

nginx: configuration file /application/nginx-1.8.1/conf/nginx.conf test is successful

[root@web01 conf]# /application/nginx/sbin/nginx -s reload

[root@web01 conf]# netstat -tunlp | grep nginx

tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1559/nginx

tcp 0 0 0.0.0.0:81 0.0.0.0:* LISTEN 1559/nginx

tcp 0 0 0.0.0.0:82 0.0.0.0:* LISTEN 1559/nginx

(2)在windows系统的hosts文件添加如下内容,方便解析:

172.16.1.8 lc.web01.com lc1.web01.com

(也可以直接用ip加端口号进行访问):

4、基于IP的虚拟主机 (几乎不使用):

(1)添加临时ip地址:

[root@web01 conf]# ifconfig eth1:1 172.16.1.9/24

(2)nginx.conf配置文件:

[root@web01 nginx]# cat conf/nginx.conf

worker_processes 1;

events {

worker_connections 1024;

}

http {

include mime.types;

default_type application/octet-stream;

sendfile on;

keepalive_timeout 65;

server {

listen 172.16.1.8:80;

server_name lc.web01.com;

location / {

root html/lc;

index lc.html;

}

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

}

server {

listen 172.16.1.9:80;

server_name lc1.web01.com;

location / {

root html/lc1;

index lc1.html;

}

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

}

}

[root@web01 conf]# /application/nginx/sbin/nginx -t

nginx: the configuration file /application/nginx-1.8.1/conf/nginx.conf syntax is ok

nginx: configuration file /application/nginx-1.8.1/conf/nginx.conf test is successful

[root@web01 conf]# /application/nginx/sbin/nginx -s relaod

[root@web01 nginx]# netstat -tunlp | grep nginx

tcp 0 0 172.16.1.9:80 0.0.0.0:* LISTEN 2140/nginx

tcp 0 0 172.16.1.8:80 0.0.0.0:* LISTEN 2140/nginx

(3)访问:

在windows系统的hosts文件添加如下内容,方便解析:

172.16.1.8 lc.web01.com

172.16.1.9 lc1.web01.com

(也可以直接用ip直接进行访问):

5、小结:

(1)http访问虚拟主机的原理:

A、根据dns解析域名为ip地址,先建立tcp连接找到服务器的地址和端口号 ;列如:172.16.1.8:80;

B、读http 请求头 ,host内如果含域名,在服务器端找到对应的域名,返回对应域名的结果;

C、如果在浏览其中输入的是ip地址,则http请求头中host中对应的无域名,只会解析tcp第一个找到的服务并返回结果;

(2)、nginx出现403状态的问题:

没有首页文件(首页文件不匹配);

没有配置index标签;

首页文件权限不匹配;

(3)无主页报403错误的解决办法:

A、添加相应的主页,index.html

B、添加代码 :

server {

listen 80;

server_name lc1.web01.com;

autoindex on; #无主页时显示列表,可以提供http下载,适用于没有报错网页匹配的情况下;

#不过要注意权限,提供的目录是nginx安装目录下的html/lc1目录的内容,配置在server中,监听所的location;

location / {

root html/lc1;

index lc1as.html; #可以去除index标签;

}

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

}

a、测试:

(3)、一个ip可以对应多个域名,但是一个域名只对应一个ip地址;

6、ngix服务的优化:

(1)虚拟主机配置server服务配置单独放置:

[root@web01 conf]# pwd

/application/nginx/conf

(2)创建配置文件目录:

[root@web01 conf]# mkdir extra

(3)创建配置文件(本例使用的是基于ip的虚拟主机):

[root@web01 extra]# touch lc.web01.conf

server {

listen 172.16.1.8:80;

server_name lc.web01.com;

location / {

root html/lc;

index lc.html;

}

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

}

[root@web01 extra]# touch lc1.web01.conf

server {

listen 172.16.1.9:80;

server_name lc1.web01.com;

location / {

root html/lc1;

index lc1.html;

}

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

}

(4)修改nginx配置文件:

[root@web01 extra]# vim ../nginx.conf

worker_processes 1;

events {

worker_connections 1024;

}

http {

include mime.types;

default_type application/octet-stream;

sendfile on;

keepalive_timeout 65;

include extra/*.conf; #匹配所有配置文件,一般情况下不修改主配置文件;

}

(5)检查配置,平滑重启服务:

[root@web01 nginx]# sbin/nginx -t

nginx: the configuration file /application/nginx-1.8.1/conf/nginx.conf syntax is ok

nginx: configuration file /application/nginx-1.8.1/conf/nginx.conf test is successful

[root@web01 nginx]# sbin/nginx -s reload

[root@web01 nginx]# netstat -tunlp | grep nginx

tcp 0 0 172.16.1.9:80 0.0.0.0:* LISTEN 2140/nginx

tcp 0 0 172.16.1.8:80 0.0.0.0:* LISTEN 2140/nginx

(6)访问:

在windows系统的hosts文件添加如下内容,方便解析:

172.16.1.8 lc.web01.com

172.16.1.9 lc1.web01.com

(也可以直接用ip直接进行访问):

7、配置nginx虚拟主机别名:

(1)用途:

多数企业希望访问 www.web01.com和web01.com所浏览的是同一个页面,若有这类需求,就可以让web01.com

以别名的形式出现,这两个域名都要解析到服务器的ip地址;因为服务器在对外提供访问时,可能主域名对外提供服务,

端口号不同;可以在监控服务器里配置hosts(添加服务别名)来监控别名URL是否正常进而判断每一台服务器的服务是否正常;

(2)修改nginx server配置文件:

[root@web01 nginx]# vim conf/extra/web01.conf

server {

listen :80;

server_name www.web01.com web01.com;

location / {

root html;

index index.html index.htm;

}

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

}

(3)访问:

在windows系统的hosts文件添加如下内容,方便解析:

172.16.1.8 web01.com www.web01.com

8、nginx状态:

nginx软件的功能模块中有一个ngx_http_stub_status_module模块,这个功能模块主要功能时记录nginx的基本访问状态信息,

让使用者了解nginx的工作状态,例如:连接数等信息;

(1)查看编辑时是否使用了该模块:

[root@web01 nginx]# sbin/nginx -V

nginx version: nginx/1.8.1

built by gcc 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)

built with OpenSSL 1.0.1e-fips 11 Feb 2013

TLS SNI support enabled

configure arguments: --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --prefix=/application/nginx-1.8.1

(2)编辑配置文件:

[root@web01 nginx]# vim conf/extra/NginxStatus.conf

server {

listen :80;

server_name status.web01.com;

location / {

stub_status on; #开启状态描述;

access_log off; #访问日志,关;

#deny all;#设置禁止访问的ip

#allow 172.16.0.0/16 #设置允许访问的ip段 ,两者留一个就可,不设置默认允许所有;

}

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

}

[root@web01 nginx]# sbin/nginx -t

nginx: the configuration file /application/nginx-1.8.1/conf/nginx.conf syntax is ok

nginx: configuration file /application/nginx-1.8.1/conf/nginx.conf test is successful

[root@web01 nginx]# sbin/nginx -s reload

(3)访问:

在windows系统的hosts文件添加如下内容,方便解析:

172.16.1.8 status.web01.com

访问参数详解:

Active connections: 1 #表示nginx正在处理的活动连接数,表示并发连接数(单位时间内,服务器正在处理的连接数)

server accepts handled requests

191 191 145 #server:从启动到现在一共处理的连接数;accepts:从启动到现在成功创建的握手数;

handled requests:已经处理完毕的连接数;

Reading: 0 Writing: 1 Waiting: 0 # Reading:nginx读取客户端的header信息数;Writing:nginx返回给客户端的header信息数;

Waiting:nginx已经处理完,正在等候下一次请求指令的驻留连接;

(4)注:nat网络编辑器的使用:

9、nginx 错误日志配置:

(1) 错误级别有 debug,info,notice,warm,error,crit,alert,emerg,级别越高记录的信息就越少,

生产场景一般使用warm,error、crit,不使用info,会导致磁盘io异常;

error_log的语法及参数说明为:

error_log file level;#关键字 日志文件 错误

nginx错误日志不配置时,默认是有的,在main区块中配置级别时error,监控所有错误, 错误记录位置是nginx安装目录下的logs/error.log文件:

worker_processes 1;

error_log logs/error.log error;

events {

worker_connections 1024;

}

(2)error_log可以放置的标签段为: main http server location,配置在相应的区块,监听相应的区块服务错误:

server {

listen :80;

server_name www.web01.com web01.com;

error_log logs/error.log error;

location / {

root html;

index index.html index.htm;

}

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

}

10、nginx访问日志配置:

(1) nginx软件会把每个用户访问网站的日志信息记录到指定的日志文件中,供网站管理者分析用户浏览行为等;

位置:主配置:http; 附加配置:location,server;

nginx访问日志不配置时,默认是有的,在http区块中配置,监控所有server区块, 访问记录位置是nginx安装目录下的logs/access.log文件;

worker_processes 1;

events {

worker_connections 1024;

}

http {

include mime.types;

default_type application/octet-stream;

sendfile on;

keepalive_timeout 65;

log_format main '$remote_addr - $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for"';

access_log logs/access.log main;

include extra/*.conf;

}

(2)注:配置参数解释:

172.16.1.254 - - [05/Nov/2018:20:12:05 +0800] "GET / HTTP/1.1" 200 62 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/

537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36" "-" #如果频繁出现404响应状态码,可以先清空浏览器的缓存;

$remote_addr:访问客户端ip地址;

$remote_user:访问的用户;

[$time_local]:访问时间;

$request:请求行信息;

$status:响应状态码;

$body_bytes_sent:服务器发送给用户的字节数;

$http_referer:请求的页面;

$http_user_agent:访问客户端电脑信息;

$http_x_forwarded_for:访问客户端浏览器信息;

(3)也可以配置在sever区块中达到监控一个web服务:

worker_processes 1;

events {

worker_connections 1024;

}

http {

include mime.types;

default_type application/octet-stream;

sendfile on;

keepalive_timeout 65;

log_format main '$remote_addr - $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for"';

include extra/*.conf;

}

server {

error_log logs/error.log error;

listen 172.16.1.8:80;

server_name www.web01.com web01.com;

access_log logs/host.access.log main;

location / {

root html;

index index.html index.htm;

}

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

}

11、nginx日志轮询切割配置(方便每天搜集当天的日志);

(1)创建目录:

mkdir -p /server/root_scripts/

(2)创建脚本:

[root@web01 nginx]# vim /server/root_scripts/cut_nginx.sh

#!/bin/sh

export PATH=$PATH

cd /application/nginx/logs/

mv access.log access_$(date +%F -d -1day).log

#/application/nginx/sbin/nginx -s reload

find /application/nginx/logs/ -type f -mtime +7 | xargs rm -f

#如果有备份的话,需要做rsync备份处理;

[root@web01 nginx]# chmod u+x /server/root_scripts/cut_nginx.sh

(2)创建定时任务:

[root@web01 nginx]# crontab -e

00 00 * * * /bin/sh /server/root_scripts/cut_nginx.sh >/dev/null 2>$1

12、location的作用:

(1)location指令的作用可以根据用户请求的uri来执行不同的应用,其实就是根据用户请求的网站地址URL匹配,匹

配成功即进行相关的操作,可以理解为if else 条件语句;

(2)一个server中有多个location时的匹配规则从高到底:

location = / #1、精确的匹配,当无论放置的顺序如何都将优先被匹配并执行;

#www.web01.com 或www.web01.com/

location /document/ #2、路径匹配,即匹配了路径/documents/

#例:

location /lc/ {#目录

root lc; #目录

index index.html;

}

#www.web01.com/lc/ 或www.web01.com/lc/index.html;

location / #3、默认的匹配,如果没有匹配上其它的location,则匹配默认匹配的部分;

#www.web01.com/index.html 或任意不能匹配其它location的字符串;

结论:

13、nginx的rewirte用法

(1)nginx rewrite的主要功能时实现URL地址重写,nginx的rewirte规则需要pcre软件的支持,即通过pcrl

兼容正则表达式语法进行规则匹配的,默认参数编译的时候就会安装支持rewrite的模块,但是必须要pcre

软件的支持;

(2)指令语法:rewrite regex replacement[flag];

(3)应用位置:server、location;

例如 : rewrite ^/(.*) http://www.baidu.com.com/$1 permanenth;表示任何请求都跳转到百度:

rewrite是实现URL重写的关键指令;^/(.*)正则表达式,表示匹配所有的内容;匹配成功后

跳转到http://www.baidu.com/$1,这里的$1是指前面正则表达式()中的内容,是域名后面的内容;

perment表示永久301重定向标记, 即永远跳转到后面的http://www.baidu.com/$1地址上;

(4)flag标记:

last:本条规则匹配完成后,继续向下匹配新的URL规则;

break:本条规则匹配完成即终止,不在匹配任何后面的规则;

redirect:返回302临时重定向,浏览器地址栏会显示跳转后的URL地址;

permanent:返回301永久重定向,浏览器地址栏会显示跳转后的URL地址;

简单的正则表达式:

*:0或多个; +:一个或多个; .:任意单个字符; ?:0或一个; $:以什么结尾;

^:以什么开头;

(5)rewrite的企业应用场景:

可以调整用户浏览的URL,看起来更规范;

为了让搜索引擎收录网站内容和使用户的体验更好;

网站换新的域名后,让就得域名访问跳转到新的域名商 (不需要location也可以,直接放到server区块下面,

状态码会改变,会向新的域名网站发起请求;如果采用的是别名的方式,则看不到新的域名网址,但是返回的状态码是200,

只需一次请求,速度更快;

server {

listen :80;

server_name www.web01.com web01.com;

rewrite ^/(.*) http://www.baidu.com/$1 permanent;

}

14、根据特殊的变量、目录、进行URL跳转:

(1)nginx的口令认证(默认是关闭的状态);

位置:http,server,location;

(2)配置示例:

server {

listen :80;

server_name www.web01.com web01.com;

location / {

auth_basic "lc passwd"; # 提示

auth_basic_user_file /application/nginx/conf/htpasswd;#认证读取的账户和密码文件

root html;

index lc.html;

}

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

}

(3)创建用户及密码:

[root@web01 nginx]# htpasswd -cb /application/nginx/conf/htpasswd lc 123456

Adding password for user lc

[root@web01 nginx]# cat /application/nginx/conf/htpasswd

lc:5/GWO2AQFjfFs

(4)平滑重启:

[root@web01 nginx]# sbin/nginx -t

nginx: the configuration file /application/nginx-1.8.1/conf/nginx.conf syntax is ok

nginx: configuration file /application/nginx-1.8.1/conf/nginx.conf test is successful

[root@web01 nginx]# sbin/nginx -s reload

(5)访问:

15、优化:

1、

vim /etc/security/limits.conf

//针对root用户

root soft nofile 65535

root hard nofile 65535

//所有用户, 全局

* soft nofile 25535

* hard nofile 25535

//对于Nginx进程

worker_rlimit_nofile 45535;

//root用户

//soft提醒

//hard限制

//nofile文件数配置项

//65535最大大小

2、隐藏版本号:

curl --head http://192.168.3.139

vi /usr/local/nginx0.8/conf/nginx.conf

worker_processes 1;

events {

worker_connections 1024;

}

http {

include mime.types;

default_type application/octet-stream;

server_tokens off;

expires 5s;

sendfile on;

keepalive_timeout 65;

include "sites-enabled/mail*";

3、Nginx通用优化配置文件:

[root@nginx ~]# cat nginx.conf

user nginx;

#worker_processes最多开启8个,8个以上性能提升不会再提升了,而且稳定性变得更低,所以8个进程够用了。

worker_processes auto;

#开启利用多核cpu的配置

worker_cpu_affinity auto;

error_log /var/log/nginx/error.log warn;

pid /run/nginx.pid;

#worker进程最大打开文件数,调整至1w以上,负荷较高建议2-3w以上

worker_rlimit_nofile 35535;

events {

# 使用epoll模型,linux的高性能方式

use epoll;

#限制每个进程能处理多少个连接请求,最大连接=连接数×进程数

worker_connections 10240;

}

http {

include /etc/nginx/mime.types;

default_type application/octet-stream;

# 统一使用utf-8字符集

charset utf-8;

log_format main '$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;

# Core module

sendfile on;

# 静态资源服务器建议打开

tcp_nopush on;

# 动态资源服务建议打开,需要打开keepalived

tcp_nodelay on;

keepalive_timeout 65;

#隐藏版本号

server_tokens off;

# Gzip module

gzip on;

gzip_disable "MSIE [1-6]\.";

gzip_http_version 1.1;

#Virtal Server

include /etc/nginx/conf.d/*.conf;

}

4、nginx压力测试:

[root@nginx ~]# yum install httpd-tools -y

[root@nginx-lua ~]# ab -n2000 -c2 http://127.0.0.1/index.html

//-n总的请求次数

//-c并发请求数

//-k是否开启长连接

...

Server Software: nginx/1.12.2

Server Hostname: 127.0.0.1

Server Port: 80

Document Path: /index.html

Document Length: 19 bytes

Concurrency Level: 200

# 总花费总时长

Time taken for tests: 1.013 seconds

# 总请求数

Complete requests: 2000

# 请求失败数

Failed requests: 0

Write errors: 0

Total transferred: 510000 bytes

HTML transferred: 38000 bytes

# 每秒多少请求/s(总请求出/总共完成的时间)

Requests per second: 9333.23 [#/sec] (mean)

# 客户端访问服务端, 单个请求所需花费的时间

Time per request: 101.315 [ms] (mean)

# 服务端处理请求的时间

Time per request: 0.507 [ms] (mean, across all concurrent requests)

# 判断网络传输速率, 观察网络是否存在瓶颈

Transfer rate: 491.58 [Kbytes/sec] received

5、影响nginx的性能指标有哪些:

(1)网络:

网络的流量

网络是否丢包

这些会影响http的请求与调用

(2)系统:

硬件有没有磁盘损坏,磁盘速率

系统负载、内存、系统稳定性

(3)服务:

连接优化、请求优化

根据业务形态做对应的服务设置

(4)程序:

接口性能

处理速度

程序执行效率

(5)数据库

每个架构服务与服务之间都或多或少有一些关联, 我们需要将整个架构进行分层, 找到对应系统或服务的短板, 然后进行优化

6、补充:nginx文件句柄:

(1)文件句柄:

Linux一切皆文件,文件句柄可以理解为就是一个索引,文件句柄会随着我们进程的调用频繁增加,系统默认对文件句柄有限

制,不能让一个进程无限的调用,需要限制每个进程和每个服务使用多大的文件句柄,文件句柄是必须要调整的优化参数;

(2)设置方式

系统全局性修改

用户局部性修改

进程局部性修改

15、nginx编译安装的更多相关文章

  1. nginx编译安装

    Nginx编译安装 1.nginx官网:http://wiki.nginx.org/Install下载:http://nginx.org/en/download.html 2.编译安装# wget h ...

  2. LNMP平台搭建之一:nginx编译安装

    参考博客:https://www.cnblogs.com/zhang-shijie/p/5294162.html   jack.zhang 一.环境说明 系统环境:centos6.5 [root@lo ...

  3. Nginx编译安装lua-nginx-module

    lua-nginx-module 模块可以将Lua的强大功能嵌入NGINX服务器. 下载Nginx源码 如果已安装Nginx,需要查看当前安装版本的编译参数: $ /usr/local/nginx/s ...

  4. Nginx编译安装:

    第三方模块 在nginx.org   --------  wiki  找 --add-module=   添加 Nginx编译安装: 安装开发环境 ]# yum groupinstall " ...

  5. [nginx]编译安装及安全优化

    nginx配置-最后整理版 nginx_upstream_check_module nginx-module-vts nginx打补丁 nginx编译安装 - 下载 cd /usr/local/src ...

  6. Linux下nginx编译安装教程和编译参数详解

    这篇文章主要介绍了Linux下nginx编译安装教程和编译参数详解,需要的朋友可以参考下 一.必要软件准备1.安装pcre 为了支持rewrite功能,我们需要安装pcre 复制代码代码如下: # y ...

  7. 20190418 CentOS7实用技能综合:系统安装 + WinScp客户端连接 + 防火墙端口号iptables + Nginx编译安装 + MySQL编译安装 + Redis编译安装 + MongoDB编译安装 + ActiveMQ/RocketMQ/RabbitMQ编译安装 + ...各类常用生产环境软件的编译安装

    系统安装 + WinScp客户端连接 + 防火墙端口号iptables + Nginx编译安装 + MySQL编译安装 + Redis编译安装 + MongoDB编译安装 + ActiveMQ/Roc ...

  8. Nginx编译安装第三方模块http_substitutions_filter_module2222

    Nginx编译安装第三方模块http_substitutions_filter_module Rming -- 阅读 安装 Http 编译 module filter nginx 模块 >> ...

  9. Nginx编译安装第三方模块http_substitutions_filter_module

    Nginx编译安装第三方模块http_substitutions_filter_module 分类:服务器技术  作者:rming  时间:-- . >>ngx_http_substitu ...

  10. nginx编译安装新模块

    nginx的模块是需要重新编译nginx,而不是像apache一样配置文件引用.so 这里以安装第三方ngx_http_google_filter_module模块为例 下载第三方扩展模块ngx_ht ...

随机推荐

  1. [bug] flink on yarn 启动失败

    参考 https://www.cnblogs.com/huangguoming/p/11732663.html

  2. 查看报错原因 sshd -t

    b for ssh.service failed because the control process exited with error code. See "systemctl sta ...

  3. 解决 Ubuntu 无法使用 root 用户进行 ssh 远程登陆

    解决 Ubuntu 无法使用 root 用户进行 ssh 远程登陆 操作系统 Ubuntu 20.04.2 LTS 一.修改sshd配置文件 //打开 /etc/ssh/sshd_config 配置文 ...

  4. Zookeeper——Docker下安装部署

    单节点安装 一. 环境说明 docker: 18.09.9-ce zookeeper: 3.5.6 二. 拉取 zookeeper 镜像 拉取镜像 docker pull zookeeper 默认是摘 ...

  5. Ansible_管理事实(Fact)

    一.Ansible管理事实(fact) 1.Ansible事实描述 1️⃣:Ansible事实是Ansible在受管主机上自动检测到的变量 2️⃣:事实(fact)中包含有与主机相关的信息,可以像pl ...

  6. mysql如何设置一个字段,里面是自增的序号(1,2,3,..........)。

    [遇到问题] [可忽略] 想把以前写的留言板搬到我的网站上去,所以要在Mysql上创建一个一mu一样的数据库,表单,字段..................... userid这个字段忘记了如何添加, ...

  7. yum 命令详解-yum仓库配置文件详解

    yum安装的优点 1.必须得有网络,通过网络获取软件. 2.管理rpm包 3.自动解决依耐 4.命令简单好用 5.生产最佳实践 yum命令详解 # linux安装软件的三种方式 1.rpm安装 2.源 ...

  8. 校准仪开发日志--2017-10-20 today's question

  9. 第四代自动泊车从APA到AVP技术

    第四代自动泊车从APA到AVP技术 前言 自动泊车是指汽车自动泊车入位不需要人工控制,系统能够自动帮你将车辆停入车位,在倒车入库中可谓是驾驶者的一项利器.当我们找到一个理想的停车地点,只需轻轻启动按钮 ...

  10. IOS小组件(8):App与Widget数据共享

    引言   Widget是一个迷你版的App,IOS有沙盒机制,不同App之间无法直接共享数据.组件和主App之间其实就是不同App的关系,所以也无法通过userdefaults.standard来传数 ...