IT教程 ·

Nginx之经常使用基础设置(一)

只有努力了,你才能成为想要的样子

上一篇博客我们也许引见了一下nginx,nginx的架构,nginx编译装置和nginx敕令的用法,回忆请参考;本日我们来简朴的设置下nginx和一些简朴指令申明。

nginx和httpd相似都是高度模块化的软件,差别的模块有着差别的功用,想要把nginx设置好,起首我们须要相识各个模块的用法以及模块选项的用法和申明。起首我们来相识下nginx用yum装置后的程序环境。

[root@www ~]# rpm -ql nginx
/etc/logrotate.d/nginx
/etc/nginx/fastcgi.conf
/etc/nginx/fastcgi.conf.default
/etc/nginx/fastcgi_params
/etc/nginx/fastcgi_params.default
/etc/nginx/koi-utf
/etc/nginx/koi-win
/etc/nginx/mime.types
/etc/nginx/mime.types.default
/etc/nginx/nginx.conf
/etc/nginx/nginx.conf.default
/etc/nginx/scgi_params
/etc/nginx/scgi_params.default
/etc/nginx/uwsgi_params
/etc/nginx/uwsgi_params.default
/etc/nginx/win-utf
/usr/bin/nginx-upgrade
/usr/lib/systemd/system/nginx.service
/usr/lib64/nginx/modules
/usr/sbin/nginx
/usr/share/doc/nginx-1.16.1
……省略部分内容
/var/lib/nginx
/var/lib/nginx/tmp
/var/log/nginx
[root@www ~]# 

提醒:从上面的显现,我们也许能够相识到nginx的主设置文件是/etc/ngxin/ngxin.conf,nginx.conf.default是默许设置文件,从这个文件中我们能够相识到nginx的默许设置是怎样设置的;主程序是/usr/sbin/nginx,日记文件途径是/var/log/nginx,Unit File是nginx.service;/etc/nginx/fastcgi.conf和fastcgi_parems,这两个文件一个是fastcig协定的设置文件,一个是变量设置文件。相识了nginx 的程序环境,我们在来看看主设置文件内容

[root@www ~]# cat /etc/nginx/nginx.conf
# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    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;

    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 configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

    server {
        listen       80 default_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 {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

# Settings for a TLS enabled server.
#
#    server {
#        listen       443 ssl http2 default_server;
#        listen       [::]:443 ssl http2 default_server;
#        server_name  _;
#        root         /usr/share/nginx/html;
#
#        ssl_certificate "/etc/pki/nginx/server.crt";
#        ssl_certificate_key "/etc/pki/nginx/private/server.key";
#        ssl_session_cache shared:SSL:1m;
#        ssl_session_timeout  10m;
#        ssl_ciphers HIGH:!aNULL:!MD5;
#        ssl_prefer_server_ciphers on;
#
#        # Load configuration files for the default server block.
#        include /etc/nginx/default.d/*.conf;
#
#        location / {
#        }
#
#        error_page 404 /404.html;
#            location = /40x.html {
#        }
#
#        error_page 500 502 503 504 /50x.html;
#            location = /50x.html {
#        }
#    }

}

[root@www ~]#

提醒:主设置文件构造大抵能够分为main段(全局设置段)和http设置段或许mail设置段或许stream段,背面的http设置段或mail设置段或stream设置段,重要看nginx用于什么功用,假如纯真的用于web效劳器,那末背面的mail和stream设置段就能够不要了,也就是说有关web的设置我们必需要在http设置段设置;一样的假如nginx用于邮件代办我们就须要把有关邮件代办的设置放到mail设置段,假如用于四层负载平衡,我们须要把对应的设置写到stream设置段;我们先说一下全局设置段吧

user指令:示意指定运转worker历程的用户

[root@www ~]# head /etc/nginx/nginx.conf
  For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
[root@www ~]# ps aux |grep nginx
root       1425  0.0  0.0 120832  2244 ?        Ss   19:49   0:00 nginx: master process nginx
nginx      1426  0.0  0.0 121228  3132 ?        S    19:49   0:00 nginx: worker process
nginx      1427  0.0  0.0 121228  3132 ?        S    19:49   0:00 nginx: worker process
nginx      1428  0.0  0.0 121228  3132 ?        S    19:49   0:00 nginx: worker process
nginx      1429  0.0  0.0 121228  3132 ?        S    19:49   0:00 nginx: worker process
root       1439  0.0  0.0 112660   968 pts/0    S+   19:51   0:00 grep --color=auto nginx
[root@www ~]#

提醒:平常状况都不提议nginx用root运转;假如是集群环境提议一致历程运转用户,其次必需一致时刻

worker_processes :指定worker历程的数目,平常是和运转nginx主机的CUP中心数来定,平常都是小于或许即是物理cpu中心数,auto示意自动去婚配cup中心数来启动worker历程数目

[root@www ~]# lscpu 
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4
On-line CPU(s) list:   0-3
Thread(s) per core:    1
Core(s) per socket:    2
Socket(s):             2
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 158
Model name:            Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz
Stepping:              9
CPU MHz:               3599.644
CPU max MHz:           0.0000
CPU min MHz:           0.0000
BogoMIPS:              7200.06
Hypervisor vendor:     VMware
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              8192K
NUMA node0 CPU(s):     0-3
Flags:                 fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 invpcid rtm rdseed adx smap xsaveopt xsavec xgetbv1 dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp
[root@www ~]# ps aux |grep nginx
root       1425  0.0  0.1 121500  5272 ?        Ss   19:49   0:00 nginx: master process nginx
nginx      1453  0.0  0.0 121748  3668 ?        S    19:56   0:00 nginx: worker process
nginx      1454  0.0  0.0 121748  3668 ?        S    19:56   0:00 nginx: worker process
nginx      1455  0.0  0.0 121748  3668 ?        S    19:56   0:00 nginx: worker process
nginx      1456  0.0  0.0 121748  3668 ?        S    19:56   0:00 nginx: worker process
root       1465  0.0  0.0 112660   972 pts/0    S+   19:57   0:00 grep --color=auto nginx
[root@www ~]# 

error_log示意指定nginx毛病日记寄存文件

[root@www ~]# ll /var/log/nginx/error.log 
-rw-r--r-- 1 root root 120 Feb 27 19:56 /var/log/nginx/error.log
[root@www ~]# cat /var/log/nginx/error.log
2020/02/27 19:52:18 [notice] 1442#0: signal process started
2020/02/27 19:56:47 [notice] 1452#0: signal process started
[root@www ~]# 

pid示意指定pid文件

[root@www ~]# ps aux |grep nginx
root       1567  0.0  0.0 120832  2248 ?        Ss   20:05   0:00 nginx: master process /usr/sbin/nginx
nginx      1568  0.0  0.0 121228  3336 ?        S    20:05   0:00 nginx: worker process
nginx      1569  0.0  0.0 121228  3336 ?        S    20:05   0:00 nginx: worker process
nginx      1570  0.0  0.0 121228  3336 ?        S    20:05   0:00 nginx: worker process
nginx      1571  0.0  0.0 121228  3136 ?        S    20:05   0:00 nginx: worker process
root       1574  0.0  0.0 112660   972 pts/0    S+   20:05   0:00 grep --color=auto nginx
[root@www ~]# ll /var/run/nginx.pid 
-rw-r--r-- 1 root root 5 Feb 27 20:05 /var/run/nginx.pid
[root@www ~]# nginx -s stop
[root@www ~]# ll /var/run/nginx.pid 
ls: cannot access /var/run/nginx.pid: No such file or directory
[root@www ~]# 

提醒:pid文件就是寄存nginx主控历程的历程号的,假如nginx没有运转或许住手了效劳,那末pid文件也会随着消逝;这里提醒一下在centos7上/var/run 和/run是统一文件夹 ,它俩做的是硬链接

[root@www ~]# ll -id /var/run/
1150 drwxr-xr-x 22 root root 620 Feb 27 20:07 /var/run/
[root@www ~]# ll -id /run
1150 drwxr-xr-x 22 root root 620 Feb 27 20:07 /run
[root@www ~]# 

提醒:两个文件夹的inode号都是统一个

include此指令示意把某些处所的设置导入到此地;这个指定设置的时刻须要注重放的位置;正因为有了这个功用,我们就能够把许多差别功用的设置用专有的文件来设置,如许既轻易治理,也很容易读;

events此设置段示意设置有关事宜驱动相干的设置

worker_connections :每一个worker历程所能够翻开的最大并发衔接数;

use method:指定并发请求的处置惩罚要领;如use epoll;

accept_mutex on|off:处置惩罚新的衔接请求的要领;on示意各worker历程轮番处置惩罚新请求,off示意每来一个新请求就会关照一切的worker历程

有关机能优化的全局设置

worker_cpu_affinity cpumask:手动或自动绑定cpu,默许状况下是没有绑定cpu的,这意味着worker历程会在每一个CPU上来会调理的,如许一来在cpu就存在频仍的切换,影响机能;我们能够手动把每一个历程绑定到差别的CPU上。制止worker历程在每一个CPU上往返切换

Nginx之经常使用基础设置(一) IT教程 第1张

提醒:在没有绑定cpu时,我们对nginx worker历程提议并发衔接请求,能够看到4个worker历程在差别的CUP上往返切换,很显然这无疑在给体系过剩的开支,我们能够绑定nginx 的worker线程。

[root@www ~]# grep worker_cpu /etc/nginx/nginx.conf
worker_cpu_affinity 0001 0010 0100 1000;
[root@www ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@www ~]# nginx -s reload
[root@www ~]# 

提醒:假如你有的CPU是八核的,那末就须要用8个0来示意,个中第一个历程对应最右边的0,假如须要绑定到该cpu中心上,则对应位为1即可;

Nginx之经常使用基础设置(一) IT教程 第2张

提醒:绑定cpu我们也能够直接运用worker_cpu_affinity auto;来指定,让其自动绑定到每一个cpu中心上去

worker_priority number:指定worker历程的nice值,设定worker历程优先级;[-20,19]

[root@www ~]# grep "worker_priority" /etc/nginx/nginx.conf
worker_priority -5;
[root@www ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@www ~]# nginx -s reload                             
[root@www ~]# ps axo comm,pid,nice,psr|grep nginx
nginx             2583   0   0
nginx            31567  -5   0
nginx            31568  -5   1
nginx            31569  -5   2
nginx            31570  -5   3
[root@www ~]# 

以上就是经常使用的全局设置段指令的申明和运用,细致请参考nginx官方文档

http协定的相干设置

在主设置文件中我们能够看到有一个以http开头的设置段,这个设置段重要设置nginx工作成web效劳的设置

server:这个指令示意定义个虚拟主机相似httpd里的virtualhost,这也是一个http里的一个子设置段,内里有server_name指令 root等等

server_name:示意指定虚拟主机称号;指明虚拟主机的主机称号;后可跟多个由空缺字符分开的字符串;支撑*通配恣意长度的恣意字符;支撑~肇端的字符做正则表达式形式婚配;

婚配机制:起首是字符串准确婚配;其次是左边*通配符,然后右边*通配符,末了是正则表达式

root:设置web资本途径映照;用于指明用户请求的url所对应的当地文件体系上的文档地点目次途径;可用的位置:http, server, location, if in location;

listen:指定虚拟主机监听的地点和端口,假如只指定端口未指定地点,示意监听效劳器上的一切地点,假如在server里没有指定端口,对应的虚拟主机将监听在默许端口80上

listen address[:port] [default_server] [ssl] [http2 | spdy]  [backlog=number] [rcvbuf=size] [sndbuf=size]

default_server:设定为默许虚拟主机;

ssl:限定仅能经由历程ssl衔接该效劳

backlog=number:指定后盾行列长度

sndbuf=size:指定发送缓冲区大小

 

提醒:我们如许设置后,在hosts文件中增加对应的剖析后,用浏览器接见www.ilinux.io,此时它就会把默许主机里的映照途径下的资本相应我们

[root@www ~]# echo "this is default path " > /usr/share/nginx/html/test.html
[root@www ~]# cat /usr/share/nginx/html/test.html
this is default path 
[root@www ~]# curl http://www.ilinux.io/test.html
this is default path 
[root@www ~]# 

tcp_nodelay on|off :在keepalived形式下的衔接是不是启用TCP_NODELAY选项;

tcp_nopush on|off:在sendfile形式下,是不是启用TCP_CORK选项;

sendfile on|off:是不是启用sendfile功用;

平常状况下以上三项都是翻开的,TCP_NODELAY重如果发送报文延时问题,假如开启了该功用选项,示意不论数据包多小都实时发送,假如封闭了,平常会比及一定量的数据报文一同发送,关于小报文延时就很高,TCP_CORK重如果处理小包问题,它和TCP_NODELAY相反,启用示意要到一定量的数据包后才发送,封闭示意不必等一定量的数据报文再发送,它们二者都是处理小包问题,前者运用在长衔接形式下,后者运用在sendfile形式下;sendfile形式处理了内核到用户运用程序,用户运用程序到内核的反复历程,它可将数据报文直接从内核加载到网卡socket缓存区,直接发送出去;这三项都和机能相干,平常都是开启的;

location:此指令用于实现从uri到文件体系的途径映照;ngnix会依据用户请求的URI来搜检定义的一切location,并找出一个最好婚配,然后运用其设置;在一个server中location设置段可存在多个;

语法:location [ = | ~ | ~* | ^~ ] uri { ... }

=:对URI做准确婚配;

^~:对URI的左半部分做婚配搜检,不辨别字符大小写;

~:对URI做正则表达式形式婚配,辨别字符大小写;

~*:对URI做正则表达式形式婚配,不辨别字符大小写;

不带标记:婚配肇端于此uri的一切的url;

婚配优先级:=, ^~, ~/~*,不带标记;

示例:

location = / {
    [ configuration A ]
}

location / {
    [ configuration B ]
}

location /documents/ {
    [ configuration C ]
}

location ^~ /images/ {
    [ configuration D ]
}

location ~* .(gif|jpg|jpeg)$ {
    [ configuration E ]
}

申明:假如是用户请求uri是/ 那末在以上location中将婚配到A,假如是/index 将婚配到B,假如是/documents/index将婚配到C,假如是/images/1.jpg将婚配到D和E,然则D的优先级高于E,一切运用D的设置,假如是/document/1.jpg将婚配到C和E,然则E的优先级高于C,所以会运用E的设置;

alias path:定义资本途径别号,仅用于location中;它和root定义资本途径差别的是,root定义的资本途径运用在/uri/左边的'/',而alias定义的资本途径运用在/uri/的右边'/';

示例:

[root@www ~]# cat /etc/nginx/conf.d/test.conf
server {

        listen 80;
        server_name www.ilinux.io;

        location  /test/ {
                root /data/web/html/;

                allow all;
        }
}
[root@www ~]# cat /data/web/html/index.html 
this is /data/web/html/index.html
[root@www ~]# cat /data/web/html/index.html 
this is /data/web/html/index.html
[root@www ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@www ~]# nginx -s reload
[root@www ~]# curl http://www.ilinux.io/test/index.html
this is /data/web/html/test/index.html
[root@www ~]# 

提醒:我们用root来指定资本途径时,我们接见/test/.index.html 它返回的是/data/web/html/test/index.html,就相当于把location左边的“/”更换成root定义的途径,用户接见资本的实在途径就是/data/web/html/test/index.html;换句话讲,root指定资本途径,婚配用户URI最左边“/”,实在途径是root指定的途径+用户URI(不带左边"/")

[root@www ~]# cat /etc/nginx/conf.d/test.conf 
server {

        listen 80;
        server_name www.ilinux.io;

        location  /test/ {
                alias /data/web/html/;

                allow all;
        }
}
[root@www ~]# cat /data/web/html/index.html 
this is /data/web/html/index.html
[root@www ~]# cat /data/web/html/test/index.html 
this is /data/web/html/test/index.html
[root@www ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@www ~]# nginx -s reload
[root@www ~]# curl http://www.ilinux.io/test/index.html
this is /data/web/html/index.html
[root@www ~]# 

提醒:用alias 指定资本途径时,我们接见/test/index.html,它返回/data/web/html/index.html,相当于alias 指定的资本途径覆盖了用户请求的URI最右边的“/”,换句话说用户URI最右边的“/”就是alias所指定的资本途径,用户接见/test/index.html 就相当于接见/data/web/html/index.html;这里还须要注重一点的是 alias 指定资本途径时,必需是“/”末端,假如不以“/”末端,资本将没法找到;关于root来说是不是是“/”末端这个无请求;

index file:指定默许主页,可设置在http, server, location;

示例:

[root@www html]# cat /etc/nginx/conf.d/test.conf 
server {

        listen 80;
        server_name www.ilinux.io;
        location  /test/ {
                alias /data/web/html/;
                index test.html;
                allow all;
        }
}
[root@www html]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@www html]# nginx -s reload
[root@www html]# curl http://www.ilinux.io/test/
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.16.1</center>
</body>
</html>
[root@www html]# echo "this is default page" > /data/web/html/test.html
[root@www html]# curl http://www.ilinux.io/test/                       
this is default page
[root@www html]# 

error_page code ... [=[response]] uri:指定毛病页面,婚配指定的状况码,返回指定的URL

示例:

[root@www html]# cat /etc/nginx/conf.d/test.conf
server {

        listen 80;
        server_name www.ilinux.io;
        location  /test/ {
                alias /data/web/html/;
                index test.html;
                allow all;
        }
        error_page 404 403 /error.html;

        location /error.html {
                root /data/web/html/error;
        }
}
[root@www html]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@www html]# nginx -s reload
[root@www html]# mkdir /data/web/html/error/
[root@www html]# echo "error page" > /data/web/html/error/error.html
[root@www html]# curl http://www.ilinux.io/abc/
error page
[root@www html]# 

提醒:经由历程指定毛病页面,我们能够自定义毛病页面,也能够对毛病页面用专有的location来做设置;

Django 博客单元测试:测试评论应用

参与评论