• 1小时拿下 Nginx - 3. Nginx 配置文件详解


    Nginx 核心配置文件:nginx.conf。

    一、全局配置

    1. user  nobody;

    user 用来配置 worker 进程运行用户。

    2. worker_processes 1;

    worker_processes 是配置工程进程数目。

    worker_processes 的取值是根据硬件来进行配置。该值一般是和 CPU 数量一致或者是 CPU 数量的2倍。

    3. error_log  logs/error.log  info;

    配置全局错误日志文件以及日志级别。(默认日志级别为 error)

    日志级别有很多种:[debug, info, notice, warn, error, crit, alert, emerg]。

    从 debug、info、...... 一直到 emerg,错误严重性是越来越严重。debug 输出日志是最多、最全的,而 error 相比 debug 少很多很多。

    4. pid logs/nginx.pid;

    配置存储 pid 进程的文件。

    5. events

    events 是 nginx 和用户交互网络连接优化的配置。

    完整配置如下

    1. events{
    2. accept_mutex on;
    3. multi_accept on;
    4. worker_connections 1024;
    5. use [kqueue | rtsig | epoll | /dev/poll | select | poll | eventport];
    6. }
    • accept_mutex 可以设置进程是否互斥。这个配置主要用来应对 Nginx 的“惊群效应”。
    • multi_accept 用来设置是否允许同时接收多个网络连接。
    • worker_connections 用来配置单个 worker 进程最大的连接数,默认连接数是1024。(nginx 支持的总连接数=worker_processes * worker_connections)
    • use 是用来设置 Nginx 服务器选择哪种事件驱动来处理网络消息。

    “惊群效应”

            简单来说就是多个进程或者线程在等待同一个事件,当事件发生时,所有线程和进程都会被内核唤醒。唤醒后通常只有一个进程获得了该事件并进行处理,其他进程发现获取事件失败后又继续进入了等待状态,在一定程度上降低了系统性能。

            Nginx 后台是以多进程的工作模式,当一个进程进入后,会有多个 worker 进程会被同时唤醒,但是最终只会有一个进程可以获取到连接。如果每次唤醒的进程数目太多,就会影响 Nginx 的整体性能。如果将 accept_mutex 的值设置为 on,Nginx 会对多个进程接收连接进行序列号,一个个来唤醒接收,就防止了多个进程对连接的争抢。

    二、http 配置

    说明:http 配置不止下面这些,后面我们还会接触很多。

    1. http {
    2. include mime.types;
    3. default_type application/octet-stream;
    4. log_format main '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for" ';
    5. access_log logs/access.log main;
    6. sendfile on;
    7. tcp_nopush on;
    8. keepalive_timeout 65;
    9. gzip on;
    10. }

    1. include mime.types;

    设定 mime 类型,类型在 mime.type 文件中进行定义。

    2. default_type application/octet-stream;

    默认文件类型。

    3. log_format  main;

    日志格式设置。

    4. access_log  logs/access.log  main;

    记录访问信息。

    5. sendfile on;

    开启文件传输。

    6. tcp_nopush on;

    开启防止网络阻塞模式。

    7. keepalive_timeout  65;

    长连接超时时间,单位为秒。

    8. gzip on;

    开启 gzip 压缩传送。

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

    引入子配置文件。如果我们一个 nginx 存在多个 server,我们可以将他们拆分开来,然后通过 include 引入到 nginx.conf 中。

    三、server 配置

    说明:server 配置和 http 一样,不止下面这些,后面我们也会去说。

    server 配置是在 http 配置下,一个 http 可以有多个 server 配置。

    1. server {
    2. listen 80;
    3. server_name localhost;
    4. charset koi8-r;
    5. access_log logs/host.access.log main;
    6. location / {
    7. root html;
    8. index index.html index.htm;
    9. }
    10. error_page 500 502 503 504 /50x.html;
    11. location = /50x.html {
    12. root html;
    13. }
    14. location ~ \.php$ {
    15. proxy_pass http://127.0.0.1;
    16. }
    17. }

    1. listen 80;

    监听端口。

    2. server_name  localhost;

    服务名称,这里一般用的是域名,没有域名就用 ip。

    3. charset koi8-r;

    配置字符集。

    4. access_log  logs/host.access.log  main;

    配置当前服务的日志。

    5. location /

    匹配请求,/是根路径请求,会被该location匹配到并且处理。

    location 下面还可以进行配置

    1. location / {
    2. root /usr/share/nginx/html; # root是配置服务器的默认网关根目录位置
    3. index index.html index.htm; # 配置首页文件的名称
    4. }
    1. location / {
    2. proxy_pass http://127.0.0.1;
    3. }

    以上配置可以说只展示了 Nginx 的冰山一角,后面我们还会去接触更多的指令。这里推荐大家有问题可以参考 Nginx 官网的 documentation 文档进行学习。


    这一讲就讲到这里,有问题可以联系我:QQ 2100363119。

  • 相关阅读:
    java中获取主机信息InetAddress类的两种方法
    JAVA计算机毕业设计牙科诊所信息化管理平台Mybatis+系统+数据库+调试部署
    神经网络的原理和应用,神经网络理论及应用
    【CGAL_网格】Surface_mesh
    [图论]哈尔滨工业大学(哈工大 HIT)学习笔记40-53
    【调研】在线考试系统调研
    android和java 线程Tread
    widows2019服务器重新安装故障转移集群功能后无法重新穿件集群 ,Cluster Service 无法启动也不能使用Cluster命令 怎么清除之前的所有数据
    React 类式组件
    12.1 Go 测试的概念
  • 原文地址:https://blog.csdn.net/weixin_45908370/article/details/125890782