当前位置:   article > 正文

nginx-核心配置详解_nginx为甚么将worker进程绑定特定内核

nginx为甚么将worker进程绑定特定内核

确保你已经安装nginx,安装方法参见上一篇文章,链接如下:

https://blog.csdn.net/Outsider_people/article/details/110076862

我们已将nginx编译到srv目录下,没有启动过nginx的情况下,结构如下

  1. # ll /srv/nginx/
  2. total 20
  3. drwxr-xr-x 2 root root 4096 Jan 17 20:26 conf #存放nginx的相关配置文件
  4. drwxr-xr-x 2 root root 4096 Jan 17 18:32 html #默认提供webml的根目录
  5. drwxr-xr-x 2 root root 4096 Jan 17 18:32 logs #ngunx日志的存放目录
  6. drwxr-xr-x 2 root root 4096 Jan 17 18:32 modules #存放了一些模块会用到的库
  7. drwxr-xr-x 2 root root 4096 Jan 17 18:32 sbin #存放二进制文件,需要用二进制文件启动nginx

我没作任何配置,现在启动nginx

# /srv/nginx/sbin/nginx  # 启动nginx

nginx启动后我们就可以访问他了,虽然我们没有进行人格配置,但是nginx会默认为我们创建一个http服务器,会监听在80端口上,安装nginx的虚拟机地址是:10.0.0.8 

nginx主配置文件指令方式

  1. directive value [value2 ...];
  2. 注意
  3. (1) 指令必须以分号结尾
  4. (2) 支持使用配置变量
  5. 内建变量:由Nginx模块引入,可直接引用
  6. 自定义变量:由用户使用set命令定义,格式: set variable_name value;
  7. 引用变量:$variable_name

主配置文件结构:四部分

  1. main block:主配置段,即全局配置段,对http,mail都有效
  2. #事件驱动相关的配置
  3. event {
  4. ...
  5. }  
  6. #http/https 协议相关配置段
  7. http {
  8. ...
  9. }          
  10. #默认配置文件不包括下面两个块
  11. #mail 协议相关配置段
  12. mail {
  13. ...
  14. }    
  15. #stream 服务器相关配置段
  16. stream {
  17. ...
  18. }

默认的nginx。conf配置文件格式说明

  1. worker_processes  1;   #启动工作进程数数量
  2. events { #events设置快,主要影响nginx服务器与用户的网络连接,比如是否允许同时接受多个网络连
  3. 接,使用哪种事件驱动模型处理请求,每个工作进程可以同时支持的最大连接数,是否开启对多工作进程下的
  4. 网络连接进行序列化等。
  5.     worker_connections  1024;   #设置单个nginx工作进程可以接受的最大并发,作为web服务器
  6. 的时候最大并发数为worker_connections * worker_processes,作为反向代理的时候为
  7. (worker_connections * worker_processes)/2
  8. }
  9. http { #http块是Nginx服务器配置中的重要部分,缓存、代理和日志格式定义等绝大多数功能和第三方模
  10. 块都可以在这设置,http块可以包含多个server块,而一个server块中又可以包含多个location块,
  11. server块可以配置文件引入、MIME-Type定义、日志自定义、是否启用sendfile、连接超时时间和单个链
  12. 接的请求上限等。
  13.   include       mime.types;
  14.   default_type application/octet-stream;
  15.   sendfile       on; #作为web服务器的时候打开sendfile加快静态文件传输,指定是否使用
  16. sendfile系统调用来传输文件,sendfile系统调用在两个文件描述符之间直接传递数据(完全在内核中操
  17. 作),从而避免了数据在内核缓冲区和用户缓冲区之间的拷贝,操作效率很高,被称之为零拷贝,硬盘 >>
  18. kernel buffer (快速拷贝到kernelsocket buffer) >>协议栈。
  19.   keepalive_timeout  65;  #长连接超时时间,单位是秒
  20.   server { #设置一个虚拟机主机,可以包含自己的全局快,同时也可以包含多个location模块。比如
  21. 本虚拟机监听的端口、本虚拟机的名称和IP配置,多个server 可以使用一个端口,比如都使用80端口提供
  22. web服务、
  23.       listen       80;  #配置server监听的端口
  24.       server_name localhost; #本server的名称,当访问此名称的时候nginx会调用当前
  25. serevr内部的配置进程匹配。
  26.       location / { #location其实是server的一个指令,为nginx服务器提供比较多而且灵活的
  27. 指令,都是在location中体现的,主要是基于nginx接受到的请求字符串,对用户请求的UIL进行匹配,并
  28. 对特定的指令进行处理,包括地址重定向、数据缓存和应答控制等功能都是在这部分实现,另外很多第三方模
  29. 块的配置也是在location模块中配置。
  30.           root   html; #相当于默认页面的目录名称,默认是安装目录的相对路径,可以使用绝对
  31. 路径配置。
  32.           index index.html index.htm; #默认的页面文件名称
  33.       }
  34.       error_page   500 502 503 504 /50x.html; #错误页面的文件名称
  35.       location = /50x.html { #location处理对应的不同错误码的页面定义到/50x.html,这
  36. 个跟对应其server中定义的目录下。
  37.           root   html;  #定义默认页面所在的目录
  38.       }
  39.   }
  40.    
  41. #和邮件相关的配置
  42. #mail {
  43. #               ...
  44. #       }         mail 协议相关配置段
  45. #tcp代理配置,1.9版本以上支持
  46. #stream {
  47. #               ...
  48. #       }       stream 服务器相关配置段
  49. #导入其他路径的配置文件
  50. #include /apps/nginx/conf.d/*.conf
  51. }

全局配置

main全局配置段常见的配置指令分类

  • 正常运行必备的配置
  • 优化性能相关的配置
  • 用于调试及定位问题相关的配置
  • 事件驱动相关的配置

全局配置说明

  1. user nginx nginx; #启动Nginx工作进程的用户和组
  2. worker_processes [number | auto]; #启动Nginx工作进程的数量,一般设为和CPU核心数相同
  3. worker_cpu_affinity 00000001 00000010 00000100 00001000; #将Nginx工作进程绑定到指定
  4. 的CPU核心,默认Nginx是不进行进程绑定的,绑定并不是意味着当前nginx进程独占以一核心CPU,但是可
  5. 以保证此进程不会运行在其他核心上,这就极大减少了nginx的工作进程在不同的cpu核心上的来回跳转,减
  6. 少了CPU对进程的资源分配与回收以及内存管理等,因此可以有效的提升nginx服务器的性能。
  7. CPU MASK: 00000001:0号CPU
  8.          00000010:1号CPU
  9.  10000000:7号CPU
  10. #示例:
  11. worker_cpu_affinity 0001 0010 0100 1000;第0号---第3号CPU
  12. worker_cpu_affinity 0101 1010;
  13. #示例
  14. worker_processes  4;
  15. worker_cpu_affinity 00000010 00001000 00100000 10000000;
  16. [root@centos8 ~]# ps axo pid,cmd,psr | grep nginx
  17. 31093 nginx: master process /apps   1
  18. 34474 nginx: worker process         1
  19. 34475 nginx: worker process         3
  20. 34476 nginx: worker process         5
  21. 34477 nginx: worker process         7
  22. 35751 grep nginx
  23. #错误日志记录配置,语法:error_log file [debug | info | notice | warn | error |
  24. crit | alert | emerg]
  25. #error_log logs/error.log;
  26. #error_log logs/error.log notice;
  27. error_log /apps/nginx/logs/error.log error;
  28. #pid文件保存路径
  29. pid       /apps/nginx/logs/nginx.pid;
  30. worker_priority 0; #工作进程优先级,-20~20(19)
  31. worker_rlimit_nofile 65536; #所有worker进程能打开的文件数量上限,包括:Nginx的所有连接(例
  32. 如与代理服务器的连接等),而不仅仅是与客户端的连接,另一个考虑因素是实际的并发连接数不能超过系统
  33. 级别的最大打开文件数的限制.最好与ulimit -n 的值保持一致,
  34. [root@centos8 ~]# watch -n1 'ps -axo pid,cmd,nice | grep nginx #验证进程优先级
  35. daemon off;  #前台运行Nginx服务用于测试、docker等环境。
  36. master_process off|on; #是否开启Nginx的master-worker工作模式,仅用于开发调试场景,默认为
  37. on
  38. events {
  39.   worker_connections  65536;  #设置单个工作进程的最大并发连接数
  40.   use epoll; #使用epoll事件驱动,Nginx支持众多的事件驱动,比如:select、poll、epoll,只
  41. 能设置在events模块中设置。
  42.   accept_mutex on; #on为同一时刻一个请求轮流由work进程处理,而防止被同时唤醒所有worker,
  43. 避免多个睡眠进程被唤醒的设置,默认为off,新请求会唤醒所有worker进程,此过程也称为"惊群",因此
  44. nginx刚安装完以后要进行适当的优化。建议设置为on
  45.   multi_accept on; #ON时Nginx服务器的每个工作进程可以同时接受多个新的网络连接,此指令默
  46. 认为off,即默认为一个工作进程只能一次接受一个新的网络连接,打开后几个同时接受多个。建议设置为on
  47. }

http配置块

http协议相关的配置结构

  1. http {
  2. ...
  3. ...  #各server的公共配置
  4. server {    #每个server用于定义一个虚拟主机,第一个server为默认虚拟服务器
  5. ...
  6. }
  7. server {    
  8. ...
  9. server_name   #虚拟主机名
  10. root     #主目录
  11. alias     #路径别名
  12. location [OPERATOR] URL {     #指定URL的特性
  13. ...
  14. if CONDITION {
  15. ...
  16. }
  17. }
  18. }
  19. }

htpp协议配置说明

  1. http {
  2.   include       mime.types; #导入支持的文件类型,是相对于/apps/nginx/conf的目录
  3.   default_type application/octet-stream; #除mime.types中文件类型外,设置其它文件默
  4. 认类型,访问其它类型时会提示下载不匹配的类型文件
  5. #日志配置部分
  6.    #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  7.    #                 '$status $body_bytes_sent "$http_referer" '
  8.    #                 '"$http_user_agent" "$http_x_forwarded_for"';
  9.    #access_log logs/access.log main;
  10. #自定义优化参数
  11.   sendfile       on;
  12.    #tcp_nopush     on; #在开启了sendfile的情况下,合并请求后统一发送给客户端。
  13.    #tcp_nodelay   off; #在开启了keepalived模式下的连接是否启用TCP_NODELAY选项,当为
  14. off时,延迟0.2s发送,默认On时,不延迟发送,立即发送用户响应报文。
  15.    #keepalive_timeout 0;
  16.   keepalive_timeout  65 65; #设置会话保持时间,第二个值为响应首部:keepAlived:timeout=65,可以和第一个值不同
  17.    #gzip on; #开启文件压缩
  18.   server {
  19.       listen       80; #设置监听地址和端口
  20.       server_name localhost; #设置server name,可以以空格隔开写多个并支持正则表达
  21. 式,如:*.magedu.com www.magedu.* ~^www\d+\.magedu\.com$ default_server
  22.        #charset koi8-r; #设置编码格式,默认是俄语格式,建议改为utf-8
  23.        #access_log logs/host.access.log main;
  24.       location / {
  25.           root   html;
  26.           index index.html index.htm;
  27.       }
  28.        #error_page 404             /404.html;
  29.        # redirect server error pages to the static page /50x.html
  30.        #
  31.       error_page   500 502 503 504 /50x.html; #定义错误页面
  32.       location = /50x.html {
  33.           root   html;
  34.       }
  35.        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
  36.        #
  37.        #location ~ \.php$ { #以http的方式转发php请求到指定web服务器
  38.        #   proxy_pass   http://127.0.0.1;
  39.        #}
  40.        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  41.        #
  42.        #location ~ \.php$ { #以fastcgi的方式转发php请求到php处理
  43.        #   root           html;
  44.        #   fastcgi_pass   127.0.0.1:9000;
  45.        #   fastcgi_index index.php;
  46.        #   fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
  47.        #   include       fastcgi_params;
  48.        #}
  49.        # deny access to .htaccess files, if Apache's document root
  50.        # concurs with nginx's one
  51.        #
  52.        #location ~ /\.ht { #拒绝web形式访问指定文件,如很多的网站都是通过.htaccess文件
  53. 来改变自己的重定向等功能。
  54.        #   deny all;
  55.        #}
  56.       location ~ /passwd.html {
  57.           deny all;
  58.       }
  59.   }
  60.    # another virtual host using mix of IP-, name-, and port-based configuration
  61.    #
  62.    #server { #自定义虚拟server
  63.    #   listen       8000;
  64.    #   listen       somename:8080;
  65.    #   server_name somename alias another.alias;
  66.    #   location / {
  67.    #       root   html;
  68.    #       index index.html index.htm; #指定默认网页文件,此指令由
  69. ngx_http_index_module模块提供
  70.    #   }
  71.    #}
  72.    # HTTPS server
  73.    #
  74.    #server { #https服务器配置
  75.    #   listen       443 ssl;
  76.    #   server_name localhost;
  77.    #   ssl_certificate     cert.pem;
  78.    #   ssl_certificate_key cert.key;
  79.    #   ssl_session_cache   shared:SSL:1m;
  80.    #   ssl_session_timeout 5m;
  81.    #   ssl_ciphers HIGH:!aNULL:!MD5;
  82.    #   ssl_prefer_server_ciphers on;
  83.    #   location / {
  84.    #       root   html;
  85.    #       index index.html index.htm;
  86.    #   }
  87.    #}

响应报文server首部

  1. #是否在响应报文中的Content-Type显示指定的字符集,默认off不显示
  2. charset charset | off;
  3. #示例
  4. charset utf-8;
  5. #是否在响应报文的Server首部显示nginx版本
  6. server_tokens on | off | build | string;

范例:修改server字段

  1. 如果想自定义响应报文的nginx版本信息,需要修改源码文件,重新编译
  2. 如果server_tokens on,修改 src/core/nginx.h 修改第13-14行,如下示例
  3. #define NGINX_VERSION     "1.68.9"
  4. #define NGINX_VER         "wanginx/" NGINX_VERSION
  5. 如果server_tokens off,修改 src/http/ngx_http_header_filter_module.c
  6. 第49行,如下示例:
  7. static char ngx_http_server_string[] = "Server: nginx" CRLF;
  8. 把其中的nginx改为自己想要的文字即可,如:wanginx

修改server头部信息

  1. [root@centos8 ~]#vim /usr/local/src/nginx-1.18.0/src/core/nginx.h
  2. #define NGINX_VERSION     "1.68.9"
  3. #define NGINX_VER         "wanginx/" NGINX_VERSION  
  4. [root@centos8 ~]#vim nginx-1.18.0/src/http/ngx_http_header_filter_module.c
  5. static u_char ngx_http_server_string[] = "Server: magedu-nginx" CRLF;
  6. [root@centos7 ~]#curl -I www.magedu.org
  7. HTTP/1.1 200 OK
  8. Server: wanginx/1.68.9
  9. Date: Thu, 24 Sep 2020 07:44:05 GMT
  10. Content-Type: text/html
  11. Content-Length: 8
  12. Last-Modified: Wed, 23 Sep 2020 14:39:21 GMT
  13. Connection: keep-alive
  14. ETag: "5f6b5e19-8"
  15. Accept-Ranges: bytes
  16. [root@centos8 ~]#vim /apps/nginx/conf/conf.d/pc.conf
  17. server {
  18.     ......
  19.     server_tokens off;
  20.     ......
  21.    
  22. [root@centos7 ~]#curl -I www.magedu.org
  23. HTTP/1.1 200 OK
  24. Server: magedu-nginx
  25. Date: Thu, 24 Sep 2020 07:44:59 GMT
  26. Content-Type: text/html
  27. Content-Length: 8
  28. Last-Modified: Wed, 23 Sep 2020 14:39:21 GMT
  29. Connection: keep-alive
  30. ETag: "5f6b5e19-8"
  31. Accept-Ranges: bytes

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/254206
推荐阅读
相关标签
  

闽ICP备14008679号