配置文件

查看配置文件路径

  1. root@nginx:/# nginx -t
  2. nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
  3. nginx: configuration file /etc/nginx/nginx.conf test is successful

默认的配置文件就在/usr/local/nginx/conf/nginx.conf

  1. user nginx;
  2. worker_processes 1;
  3. error_log /var/log/nginx/error.log warn;
  4. pid /var/run/nginx.pid;
  5. events {
  6. worker_connections 1024;
  7. }
  8. http {
  9. include /etc/nginx/mime.types;
  10. default_type application/octet-stream;
  11. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  12. '$status $body_bytes_sent "$http_referer" '
  13. '"$http_user_agent" "$http_x_forwarded_for"';
  14. access_log /var/log/nginx/access.log main;
  15. sendfile on;
  16. #tcp_nopush on;
  17. keepalive_timeout 65;
  18. #gzip on;
  19. include /etc/nginx/conf.d/*.conf;
  20. }

全局块

从开始到events块之间的内容,此处的配置影响nginx服务器整体的运⾏

  • user 设置Nginx服务的系统用户
  • worker_processes 工作进程数 和硬件CPU核数一致
  • error_log nginx的错误日志
  • pid nginx服务启动时候pid
  • use 内核模型select epoll

    events块

    events块主要影响nginx服务器与⽤户的⽹络连接。
    worker_connections 1024,标识每个workderprocess⽀持的最⼤连接数为1024

    http块

    http块是对http请求的配置,也是配置最频繁的部分,虚拟主机的配置,监听端⼝的配置,请求转发、反向代理、负载均衡等 http下可配置多个server,如下实例记载nginx.conf。

  • default_type表示请求响应的默认数据类型

  • include属性表示引入的意思,示例中表示nginx的配置文件引入了mime.types文件
  • sendfile属性值为on表示启用sendfile,sendfile的作用是在底层拷贝数据的时候可以跳过应用,直接从内核拷贝到网卡,加快速度
  • keepalive_timeout表示长连接的一个保活时间,一个连接请求完并不是立马销毁,通过这个属性可以等一段时间,以便下次有请求继续用

    server块

    配置块代表配置一个虚拟机,用来启动并响应。

  • server中的listen属性表示监听的端口,不能和其它重复;

  • server_name用来配置域名,分发请求的时候会根据访问的域名和配置的域名的对应关系分发;
  • location表示其中一个请求的地址 后面可以加斜杠,等于号等正则表达式方式匹配,其中的内容是对应的链接和页面,root表示页面所载目录。

    upstream块

  • service反向服务地址加端口

  • weight 权重
  • max_fails 失败多少次认为主机已挂掉则,踢出
  • fail_timeout 踢出后重新探测时间
  • backup 备用服务
  • max_conns 允许最大连接数

    实例记载

    nginx 目录: ```bash (base) dh@DHMacBook nginx % tree . ├── conf.d │ └── default.conf ├── fastcgi_params ├── koi-utf ├── koi-win ├── logs │ └── access-es.log ├── mime.types ├── nginx.conf ├── scgi_params ├── uwsgi_params └── win-utf

2 directories, 10 files

  1. ```bash
  2. docker run -e TZ="Asia/Shanghai" -it -d -h nginx -p51001-51010:51001-51010 -v /root/***/nginx:/etc/nginx --restart=always --name nginx pub/nginx:v1

其中 nginx.conf 配置 假设部署nginx 的机器地址是11.11.11.13
以下访问地址变为:
http://11.11.11.13:51001/***
http://11.11.11.13:51001/***
http://11.11.11.13:51004/***

  1. user nginx;
  2. worker_processes 1;
  3. error_log /var/log/nginx/error.log warn;
  4. pid /var/run/nginx.pid;
  5. events {
  6. worker_connections 1024;
  7. }
  8. http {
  9. include /etc/nginx/mime.types;
  10. default_type application/octet-stream;
  11. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  12. '$status $body_bytes_sent "$http_referer" '
  13. '"$http_user_agent" "$http_x_forwarded_for"';
  14. access_log /var/log/nginx/access.log main;
  15. sendfile on;
  16. #tcp_nopush on;
  17. keepalive_timeout 65;
  18. #gzip on;
  19. include /etc/nginx/conf.d/*.conf;
  20. ###################################################### KEYWORD #############################
  21. upstream keywordserver {
  22. server 11.11.11.11:51001;
  23. }
  24. server {
  25. listen 51001;
  26. server_name keywordserver;
  27. location / {
  28. proxy_redirect off;
  29. proxy_set_header Host $host:$server_port;
  30. proxy_set_header X-Real-IP $remote_addr;
  31. proxy_set_header REMOTE-HOST $remote_addr;
  32. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  33. proxy_pass http://keywordserver;
  34. }
  35. }
  36. ###################################################### END KEYWORD #############################
  37. ###################################################### AIWEB #############################
  38. upstream aiwebserver {
  39. server 11.11.11.12:51002;
  40. server 11.11.11.11:51002;
  41. }
  42. server {
  43. listen 51002;
  44. server_name aiwebserver;
  45. location / {
  46. proxy_redirect off;
  47. proxy_set_header Host $host:$server_port;
  48. proxy_set_header X-Real-IP $remote_addr;
  49. proxy_set_header REMOTE-HOST $remote_addr;
  50. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  51. proxy_pass http://aiwebserver;
  52. }
  53. }
  54. ###################################################### END AIWEB #############################
  55. ###################################################### EVENT #############################
  56. upstream eventgraphserver {
  57. server 11.11.11.11:54004;
  58. server 11.11.11.12:54004;
  59. }
  60. server {
  61. listen 51004;
  62. server_name eventgraphserver;
  63. location / {
  64. proxy_redirect off;
  65. proxy_set_header Host $host:$server_port;
  66. proxy_set_header X-Real-IP $remote_addr;
  67. proxy_set_header REMOTE-HOST $remote_addr;
  68. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  69. proxy_pass http://eventgraphserver;
  70. }
  71. }
  72. ###################################################### END EVENT #############################
  73. }

指令语法

  • 配置文件由指令和指令块(配置块)构成
  • 每条指令以;分号结尾,指令与参数间以空格符号分隔
  • 指令块以大括号{}将多条指令组织在一起,例如上面的event 块
  • 指令块和左大括号直接要有空格。
  • include 语句允许组合多个配置文件以提升可维护性,eg include /etc/nginx/conf.d/*.conf;
  • 使用# 符号添加注,提高可读性,注释必须是单行的,如果多行注释,那么每行都要以#开头。
  • 使用$符号使用变量
  • 部分指令的参数支持正则表达式

    指令层级

    ```nginx user nobody; # main 级别配置,

events { use epoll; # events级别配置, nginx事件机制 }

http { # http 级别 nginx的http核心模块

  1. server { # server 级别,一个server代表一个虚拟主机
  2. location {
  3. # location级别, 一个location代表一类url
  4. }
  5. }

}

  1. <a name="P43dJ"></a>
  2. ## 日志设置
  3. 日志类型
  4. - error.log
  5. - access.log 用来定义日志级别,日志位置。
  6. - log_format 设置日志格式
  7. ```bash
  8. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  9. '$status $body_bytes_sent "$http_referer" '
  10. '"$http_user_agent" "$http_x_forwarded_for"';
  11. access_log /var/log/nginx/access.log main;

常见的日志变量

  1. $remote_addr, $http_x_forwarded_for 记录客户端IP地址
  2. $remote_user记录客户端用户名称
  3. $request记录请求的URLHTTP协议(GET,POST,DEL,等)
  4. $status记录请求状态
  5. $body_bytes_sent发送给客户端的字节数,不包括响应头的大小; 该变量与Apache模块mod_log_config里的“%B”参数兼容。
  6. $bytes_sent发送给客户端的总字节数。
  7. $connection连接的序列号。
  8. $connection_requests 当前通过一个连接获得的请求数量。
  9. $msec 日志写入时间。单位为秒,精度是毫秒。
  10. $pipe如果请求是通过HTTP流水线(pipelined)发送,pipe值为“p”,否则为“.”。
  11. $http_referer 记录从哪个页面链接访问过来的
  12. $http_user_agent记录客户端浏览器相关信息
  13. $request_length请求的长度(包括请求行,请求头和请求正文)。
  14. $request_time 请求处理时间,单位为秒,精度毫秒; 从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止。
  15. $time_iso8601 ISO8601标准格式下的本地时间。
  16. $time_local通用日志格式下的本地时间

gzip 压缩

gzip压缩后页面大小可以变为原来的更小,提高用户浏览页面的访问速度

  1. gzip on;
  2. gzip_buffers 32 4K;
  3. gzip_comp_level 2;
  4. gzip_min_length 100;
  5. gzip_types application/javascript text/css text/xml;
  6. gzip_disable "MSIE [1-6]\.";
  7. gzip_vary off;

gzip配置的常用参数
gzip on|off; #是否开启gzip
gzip_buffers 32 4K| 16 8K #缓冲(压缩在内存中缓冲几块? 每块多大?)
gzip_comp_level [1-9] #推荐6 压缩级别(级别越高,压的越小,越浪费CPU计算资源)
gzip_disable #正则匹配UA 什么样的Uri不进行gzip
gzip_min_length 200 # 开始压缩的最小长度(再小就不要压缩了,意义不在)
gzip_http_version 1.0|1.1 # 开始压缩的http协议版本(可以不设置,目前几乎全是1.1协议)
gzip_proxied # 设置请求者代理服务器,该如何缓存内容
gzip_types text/plain application/xml # 对哪些类型的文件用压缩 如txt,xml,html ,css
gzip_vary on|off # 是否传输gzip压缩标志

黑白名单配置

ref:https://www.jianshu.com/p/7d3360bb1250