nginx企业应用配置

简介: 一、nginx配置二、ngx_http_core_module

nginx企业应用配置

 

目录

一、nginx配置

二、ngx_http_core_module

 

 

一、nginx配置


性能优化相关的配置:

1 worker_processes number | auto
worker
进程的数量;通常应该为当前主机的cpu的物理核心数

注:

worker进程的数量不是越多越好,一般与当前cpu的物理核心数数量一致即可,因为worker进程还涉及到上下文切换的问题,通常来说进程与进程之间是无法共享资源的。

 

比如一个用户数据第一次访问worker时,但下次使用时会刷新进入下一个worker,所以之前的信息就无法使用了。

但在同一个worker中,虽然是不同的用户进行访问,但是所分配的cpu一样。我们就可以使用一个worker为其提供服务。

 

worker_processes 决定工作进程的数量

此外,我们还可以进行cpu的绑定,将具体的一个workercpu绑定在一个cpu内核上去,这样的好处在于提高缓存的命中率,因为在cpu中自带就有缓存,若将worker进行绑定,那么cpu中的缓存就可以不断地提供使用。

如果不进行绑定,worker就存在不稳定性,会在不同的cpu中进行切换,使得信息失效,由此影响性能。

 

2、worker_cpu_affinity cpumask
worker_cpu_affinity auto [cpumask]
绑定workercpu可以提高缓存命中率,如果worker始终与一个cpu绑定,如此一来cup中的资源可以一直提供给worker使用,避免了worker四处跳跃导致性能受到影响。

 

CPU MASK000000010CPU
00000010
1CPU
10000000
8CPU

 

绑定语法:

worker_cpu_affinity 0001 0010 0100 1000;
worker_cpu_affinity 01011010;

 

实例:当我们在四颗cup中只用两颗时,首先对设置进行修正,将auto改为2,于是当前的worker数变为两个:worker-processes auto变为worker-processes 2.

 

一般使用ps查找工作在cupworker

[root@contos7 nginx]#ps axo pid,cmd pid | grop nginx
36800 nginx :master process nginx  0
36801 nginx:worker process         1
36802 nginx :worker Process         2
36815 grep
color=auto nginx        0

 

多次行走都没有变化,此时我们可以进行触发。结果表示:

36800 nginx :master process nginx   0
36801 nginx:worker process         1
36802 nginx :worker Process         1
36815 grep
color=auto nginx        0

得出worker进程为和cpu进行绑定。

 

于是我们使用worker_cpu_affinity(例子 0001 0010 0100 1000)这个指令来进行绑定,affinity 为亲缘性,写法参照CPU MASK

 

3、 worker_priority number
指定worker进程的nice值,设定worker进程优先级:[-20,20]

默认优先级由为,可以使用worker_priority number来指定优先级,以-10为例

User nginx

Worker-processes 2

Worker-cpu-affinity 0010 0010;

Worker-priorrity -10

Error-log /var/log/nginx/error.log

Pid /run/nginx.pid

绑定结果

36800 nginx :master process nginx   0   0
36801 nginx:worker process         1   -10
36802 nginx :worker Process         2   -10
36815 grep
color=auto nginx        0   0

20为例

User nginx

Worker-processes 2

Worker-cpu-affinity 0010 0010;

Worker-priorrity 19

Error-log /var/log/nginx/error.log

Pid /run/nginx.pid

绑定结果

36800 nginx :master process nginx   0   0
36801 nginx:worker process         1   19
36802 nginx :worker Process         2   19
36815 grep
color=auto nginx        0   0

得出优先级最大值只能到19

19为例

User nginx

Worker-processes 2

Worker-cpu-affinity 0010 0010;

Worker-priorrity 19

Error-log /var/log/nginx/error.log

Pid /run/nginx.pid

绑定结果

36800 nginx :master process nginx   0   0
36801 nginx:worker process         1   19
36802 nginx :worker Process         2   19
36815 grep
color=auto nginx        0   0

199为例

User nginx

Worker-processes 2

Worker-cpu-affinity 0010 0010;

Worker-priorrity 199

Error-log /var/log/nginx/error.log

Pid /run/nginx.pid

绑定结果

36800 nginx :master process nginx   0   0
36801 nginx:worker process         1   19
36802 nginx :worker Process         2   19
36815 grep
color=auto nginx        0   0

此时设置数值已超过但是优先级最大还是19,语法检查不出错误

 

4、worker_rlimit_nofile number
worker
进程所能够打开的文件数量上限,如6553

没有默认值,可按情况设置

Syntax  worker.rlimit_core size
Default ___
Context: main

 

事件驱动相关的配置
events (

}
1. worker connections number
 
每个worker进程所能够打开的最大并发连接数数量,如10240
 
总最大并发数:worker-processes * worker-connections


2
use method
 
指明并发连接请求的处理方法,默认自动选择最优方法
默认使用use epoll;优势在于epoll


3
accept mutex on I off 互斥
  处理新的连接请求的方法:on指由各个worker轮流处理新请求Off指每个新请求的到达都会通知(唤醒)所有的worker进程 但只有 个进程可获得连接,造成“惊群”,影响性能。

设置范围只能在event

Synitabc   accept.mutex on Ioff
Default    accept muter off,
Context    events

 

调试和定位问题
1. daemon on off
是否以守护进程方式运行nignx,默认是守护进程方式,

Syntac     daemon on I off
Default     daemon on
Contest     main
作用:Determines whether nginx should become a daemon. Mainly used during development

我们只能放在下面的语句块(命域语句块)中:

User nginx

Worker-processes 2

Worker-cpu-affinity 0010 0010;

Worker-priorrity -10

Error-log /var/log/nginx/error.log

Pid /run/nginx.pid


2
master_process on|off
是否以master/worker模型运行nginx;默认为on
off
将不启动worker


3 error_log file [level]错误日志文件及其级别;出于调试需要,可设定为debug;但debug仅在编译时使用了”-with-debug”选项时才有效


方式:file /path/logfile;
stderr:
发送到标准错误
syslog:server-addresslparameter=values]:
发送到syslog memory:size内存               level:debuglinfo|notice|warn|error|crit|alterlemerg

http协议的相关配置
http {

… …
server {


server name
root
location [OPERATOR] /uri/ {

}

}
server {

       

}

}

 

 

ngx_http_core_module

  • ngx_http_core_module(核心模块)

在官方文件中有很多指令,如listenserverserver-nameroot,只写都是经常使用的。

  • 与套接字相关的配置
    1
    server (...)
    配置一个虚拟主机

 

参考:

server {
listen address[:PORT]|PORT;
server_name SERVER_NAME;
root /PATH/TO/DOCUMENT_ROOT;

 

举例:当我们搭建一个网站时以 server这一个语句块来组成的,工作在http语句块中,server-name为网站名,root为存放主页路径。

http {
log_format main .Sremote-addr-Sremote-user[Stime-local]
Srequest

.Sstatus Sbody-bytes-sentShttp-referer

‘”Shttp-user-agent””Shttp-x-forwarded-for”’


access_log /var/log/ngin/access.log main;
sendfile          on
tcp nopush       on;
tcp nodelay        on;
keepalive timeout   65
·
types hash max size 2048;


include            /etc/nginx/mime.types;
defauit_type        application/octet-stream;
#Load modular configuration files from.the /etc/nginx/conf.d directory.

# Seehttp://nginx.org/en/docs/ngxcore module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;


server {
listen         80default server;
listen          [::]:80 default_server;
server-name       -;
root           /usr/share/nginx/html;


# Load configuration files for the default server block.
include/etc/nginx/default.d/*.conf;


location / {

}
error_page 404 /404.html;
location =/40x.html

我们可以自己建立一个目录或在*.conf搭建一个网站

[root@centos7 nginx]#

[root@centos7 nginx]#cd/ect/nginx/conf.d/

[root@centos7 nginx]#ls

[root@centos7 nginx]#mkdir vhosts

[root@centos7 nginx]#cd vhosts/

[root@centos7 nginx]#vim a.com.conf

Server {

    Listen 80;

    Server-name www.a.com

    Root/data/sitea/;

}

Server{

    Listen 80

    Server-name www.b.comwww.c.com

}

 

要向方便管理,只需要新建一个文件存放即可,就算出现错误,只用在这个文件夹中进行查找,不影响其他网站工作。

 

官方listen说明

Syntax: listen address[:port][default server][ssl] [http2 | spdy

[proxy protocol]

[setfit=number][fastopen=number][backlog=number][rcvbu

=size][-sndbuf=size]

[accept-filter=filter][keepidle][bind] [ipv6only on|off]Lreusep

ort]

[so-keepalive=on|off|keepdie]:[keepintvl]:[keepcent]
lisent port [default-server][ssl][http2|spdy][proxy-protocol][setfib=number]

[fastopen=number][backlog=number][ rcvbut=size][sndbuf=size][accept-filter=filter]

[keepintvl] :[keepcent]

[so-keepalive=on|off|keepdie]:[keepintvl]:[keepcent]

listenunix:port[default-server][ssl] [http2 |spdy] [proxy_protocol

[backlog=number][rcvbuf=size][sedbuf=size][accept filter=filter][deferred][bind]

[so-keepalive=on|off|keepidle][ Keepintvl][ keeocntl]

Default: listen *:80 *8000

Context:server

 

举例:

Sets the address and port for IP, or the path for a UNIX-domain socket on which the serve-r will accept requests. Both address and port, or only address or only port can be specifie-d. An address may also be a hostname, for example:
listen 127.0.0.1:8000;

listen 127.0.0.1;

listen 8000
listen localhos 8000

 

2listen PORT|address[:port]|unix:/PATH/TO/SOCKET_FILE
listen address[:port][default_server] [ssI] [http2 | spdy] [backlog=number] [rcvbuf=size][sndbuf=size]
default_server      
设定为默认虚拟主机
ssl                  
限制仅能够通过Ssl连接提供服务
backlog=number      
超过并发连接数后,新请求进入后援队列的长度

rcvbuf=size         接收缓冲区大小
sndbuf=size        
发送缓冲区大小

 

注意:
(1)
基于port;
  listen PORT        
指令监听在不同的端口


(2)
基于ip的虚拟主机
  listen IP:PORT        IP
地址不同


(3)
基于hostname
server_name fodn;      
指令指向不同的主机名

 

3. server_name name..;

  • 虚拟主机的主机名称后可跟多个由空白字符分隔的字符串
  • 支持*通配任意长度的任意字符
    server_name.magedu.com
    www.magedu.*
  • 支持~起始的字符做正则表达式模式匹配,性能原因慎用server name  ~^www\d+\.magedu\.com$\d表示数字;+表示一个或一个以上,至少一个;
    说明:\d 表示 [0-9]
  • 匹配优先级机制从高到低

 

(1)  首先是字符串精确匹配 如:www.magedu.com
(2)
左侧*通配符 如:*.magedu.com
(3)
右侧*通配符 如:www.magedu.*
(4)
正则表达式如:~^*\.magedu\.com$
(5) default_server

 

4tcp_nodelay on | off;
keepalived模式下的连接是否启用TCP_NODELAY选项当为off时,延迟发送,合并多个请求后再发送。

默认On时,不延迟发送

注:启用keepalived模式意味着用户发请求后不立即断开,可继续发多个请求过来,off为合并多个请求一起回应,on为不延迟发送,来一个就立即回应。延迟发送对服务器资源有一定的好处,西南节约,但一般由于考虑用户感受所以默认为on
可用于:http, server, location


5sendfile on | off;
是否启用sendfile功能,在内核中封装报文直接发送

默认Off


6 server_tokens on | off | build | string
是否在响应报文的Server首部显示nginx版本

server_tokens在各网站自己的语句块中实现隐藏

例:http {
log_format main
Sramotu -addr-Sremote-user[Scimo local] Sroouast"
             
Sstatus Sbody bytew-sentSHTTP_REFERER

‘”Shttp_user-agent””Shttp_x_forwarded_foraccess _loa /var/log/nginx/access.log main;
server_tokens  off;
sendfile            on;
tcp_nopush         on
tcp_nodelay         on
keepalive_timeout    65;
types_hash_max_size 2048;


include             /etc/nginx/mime.types;
default_type         application/octet-stream;


#Load modular confiaurationfiles from the /etc/nginx/conf.d directory.  

#Seehttp://nginx.org/en/docs/ngx_core_module.html#include
#for more information.
include /etc/nginx/conf.d/*.conf;
Include /etc/nginx/conf.d/vhosts/*.conf;
server
listen 80
#listen 80default_server;
listen [::]:80default._server;
Se VeI".name
ginx/nginx.conf 91L
2573C written
whosts4whosts]/nginx

显得不够安全,所以进行隐藏处理。

隐藏后:

[root@centos7 ~]#cur1 -I bbs.b.com
cur1:(6) Could not resolvehost :bbs.b.com;Unknown error
[root@centos7 -]#curl -
www.b.com
HTTP/1.1 200 OK
Server:nginx/1.12.2
Date: wed,04 JuT201806:54:34 GMT
Content-Type:text/htm1
Content-Length: 10
Last-Modified:Wed 04Ju1 2018 06:37:22 GMT
Connection: keep-alive
ETag:"5b3c6b22-a
Accept-Ranges:bytes

 

定义路径相关的配置


7.root
设置web资源的路径映射;用于指明请求的URL所对应的文档的目录路径,可用于http, server, location, if in location
server {


root /data/www/vhost1

}
示例
http://www.magedu.com/images/logo.jpg
--> /data/www/vhosts/images/logo.jpg

 

8.   location[=|~|~*|^~]uri{...}
location @name {
}(可以定义一个位置。针对某一个位置进行额外处理,放在server语句块中。

功能:针对某一个具体的路径来定义相应的规则。

Server  {

Listen 80

Server-name*.a.com

Location / {        /代表额外设置

Root /data/sitea/

}

a.com.conf"8L.105C written
[root@centos7 vhosts]#cp/data/sitea/news/ c^c

[root@centos7 vhosts]#mkdir/app

Mkdir:cannot create directory/app:f;ie exists

[root@centos7 vhosts]#vim a.com.conf^c
[root@centos7 vhosts]#cp -r data/sitea/naws /app

[root@centos7 vhosts]#tree app/
/app/
  news
       index.html
1 directory.1 file
[root@centos7 vhosts]#mkdir /app/sitea
[root@centos7 vhosts]# cd/app/sitea
[root@centos7 siteal]#ls
[root@centos7 sitea]#cd..
[root@centos7 app]#ls

News sitea
[root@centos7 app]#mv news/ sitea/
[root@centos7 app]# tree
sitea
  news

index.html
2directories.1 file
r[root@centos7 app]#tree /app
/app
  sitea
     news
         index.html
2 directorise.1 file
[root@centos7 app]#vim sitea/news
在一个serverlocation配置段可存在多个,用于实现从uri到文件系统的路径映射;ngnix会根据用户请求的URI来检查定义的所有location,并找出一个最佳匹配,而后应用其配置

 

示例:
server {..
  server-name www.magedu.com;
  location /images/ {
      root /data/imgs/

}
}
http://www.magedu.com/images/logo.jpg
-->/data/imgs/images/logo.jpg

示例结束

 

=:对URI做精确匹配;
location=/ {

}

http://www.magedu.com/ 匹配
http://www.magedu.com/index.html 
不匹配

^~:     对URI的最左边部分做匹配检查,不区分字符大小写
~:      
URI做正则表达式模式匹配,区分字符大小写

~*       URI做正则表达式模式匹配,不区分字符大小写

不带符号:匹配起始于此uri的所有的uri
匹配优先级从高到低: =^~~/~*,不带符号

 

示例:
root/vhosts/www/htdocs/
  http://www.magedu.com/index.html
   --> /vhosts/www/htdocs/index.html
server {
 root /vhosts/www/htdocs/
    location /admin/ {
       root /webapps/app1/data/

}

}
http://www.magedu.com/admin/index.html
 --> /webapps/app1/data/admin/index.html

 

location示例
location =/{            
http://www.magedu.com/匹配语句块A
      [ configuration A ]

}                                http://www.magedu.com/
location /{                      index.html
      [ configuration B ]

}                                 http://www.magedu.com/
location /documents/{             documents/logo.jpg

匹配C E但由于C不带符号优先级低于E所以E生效
      [ configuration C ]
}                                http://www.magedu.com/
location^~ /images/{              documents/linux.txt
     [ configuration D ]
)                                Ihttp://www.magedu.com
location ~* \(gifljpgljpeg)${   /images/logo.jpeg
      [ configuration E]
)


9alias path;
路径别名,文档映射的另一种机制;仅能用于location上下文

示例
http://www.magedu.com/bbs/index.php
location /bbs/{
alias /web/forum/;
}   --> /web/forum/index.html
location/bbs/{
root /web/forum/;
}   -->/web/forum/bbs/index.html


注意:location中使用root指令和alias指令的意义不同

(a) root,给定的路径对应于location中的/uri/左侧的/

(b) alias,给定的路径对应于location中的/uri/右侧的/

 

10index file....
指定默认网页文件,注意:ngx_http_index_module模块

相关文章
|
18天前
|
移动开发 前端开发 JavaScript
前端vue2、vue3去掉url路由“ # ”号——nginx配置(一)
前端vue2、vue3去掉url路由“ # ”号——nginx配置
52 0
|
18天前
|
JavaScript 前端开发 应用服务中间件
angular引入包、路由权限配置、打包问题与nginx配置问题(简单部署)
angular引入包、路由权限配置、打包问题与nginx配置问题(简单部署)
24 0
|
18天前
|
前端开发 JavaScript 应用服务中间件
前端vue2、vue3去掉url路由“ # ”号——nginx配置(二)
前端vue2、vue3去掉url路由“ # ”号——nginx配置
48 0
|
3天前
|
应用服务中间件 nginx
nginx配置集群轮训策略
nginx配置集群轮训策略
10 0
|
4天前
|
安全 网络协议 应用服务中间件
一文读懂HTTPS⭐揭秘加密传输背后的原理与Nginx配置攻略
一文读懂HTTPS⭐揭秘加密传输背后的原理与Nginx配置攻略
|
11天前
|
应用服务中间件 PHP nginx
php如何实现检测nginx配置的正确性
请确保在执行此操作时,PHP有足够的权限来执行Nginx命令和访问Nginx配置文件。另外,将上述代码嵌入到您的应用程序中时,要注意安全性,以防止潜在的命令注入攻击。
51 3
|
18天前
|
安全 应用服务中间件 网络安全
linux_nginx中添加ssl配置(open ssl)
linux_nginx中添加ssl配置(open ssl)
25 1
|
18天前
|
JSON JavaScript 前端开发
vue2_vite.config.js的proxy跨域配置和nginx配置代理有啥区别?
vue2_vite.config.js的proxy跨域配置和nginx配置代理有啥区别?
33 1
|
21天前
|
安全 应用服务中间件 网络安全
SSL原理、生成SSL密钥对、Nginx配置SSL
现在,你的Nginx虚拟主机应该已经配置了SSL,可以通过HTTPS安全访问。确保在生产环境中使用有效的SSL证书来保护通信的安全性。
32 0
|
24天前
|
域名解析 缓存 负载均衡
Nginx正向代理域名的配置
Nginx正向代理域名的配置