- # ------------------------------------- 全局配置
-
- # Nginx worker 进程运行的用户及用户组
- # 语法:user username[groupname] 默认:user nobody nobody
- # user用于设置master进程启动后,fork出的worker进程运行在那个用户和用户组下。当按照"user username;"设置时,用户组名与用户名相同。
- # 若用户在 configure 命令执行时,使用了参数 --user=usergroup 和 --group=groupname ,此时 nginx.conf 将使用参数中指定的用户和用户组。
- #user nobody;
-
- # Nginx worker 进程个数:其数量直接影响性能。
- # 推荐设置:cpu的个数 * 核心数(几核CPU)
- # 每个 worker 进程都是单线程的进程,他们会调用各个模块以实现多种多样的功能。如果这些模块不会出现阻塞式的调用,那么,有多少CPU内核就应该配置多少个进程,反之,有可能出现阻塞式调用,那么,需要配置稍多一些的worker进程。
- worker_processes 1;
-
- # ssl硬件加速。
- # 用户可以用 OpneSSL 提供的命令来查看是否有ssl硬件加速设备:openssl engine -t
- #ssl_engine device;
-
- # 守护进程(daemon)。是脱离终端在后台允许的进程。它脱离终端是为了避免进程执行过程中的信息在任何终端上显示。这样一来,进程也不会被任何终端所产生的信息所打断。##
- # 关闭守护进程的模式,之所以提供这种模式,是为了放便跟踪调试 nginx,毕竟用gdb调试进程时最繁琐的就是如何继续跟进fork出的子进程了。##
- # 如果用 off 关闭了 master_proccess 方式,就不会fork出 worker 子进程来处理请求,而是用 master 进程自身来处理请求
- #daemon off; # 查看是否以守护进程的方式运行 Nginx 默认是 on
- #master_process off; # 是否以 master/worker 方式工作 默认是 on
-
-
- # error 日志的设置
- # 语法:error_log path/file level;
- # 默认:error_log logs/error.log error;
- # 当 path/file 的值为 /dev/null 时,这样就不会输出任何日志了,这也是关闭 error 日志的唯一手段;
- # leve 的取值范围是 debug、info、notice、warn、error、crit、alert、emerg 从左至右级别依次增大。
- # 当 level 的级别为 error 时,error、crit、alert、emerg 级别的日志就都会输出。大于等于该级别会输出,小于该级别的不会输出。
- # 如果设定的日志级别是 debug,则会输出所有的日志,这一数据量会很大,需要预先确保 /path/file 所在的磁盘有足够的磁盘空间。级别设定到 debug,必须在 configure 时加入 --with-debug 配置项。
- #error_log logs/error.log;
- #error_log logs/error.log notice;
- #error_log logs/error.log info;
-
- # pid文件的路径(master进程ID的pid文件存放路径)
- #pid logs/nginx.pid;
-
- # ------------------------------------- 事件配置
-
- events {
-
- # 仅对指定的客户端输出 debug 级别的日志: 语法:debug_connection [IP || CIDR]
- # 这个设置项实际上属于事件类配置,因此必须放在 events{……} 中才会生效。它的值可以是 IP 地址或者 CIRD 地址。
- # 这样,仅仅以下IP地址的请求才会输出 debug 级别的日志,其他请求仍然沿用 error_log 中配置的日志级别
- # 注意:在使用 debug_connection 前,需确保在执行 configure 时已经加入了 --with-debug 参数,否则不会生效。
- #debug_connection 10.224.66.14; # 或是 debug_connection 10.224.57.0/24
-
- # 单个 cpu 进程的最大并发连接数(一个进程的并发量)
- # 根据硬件调整,合前面工作进程配合起来用,尽量大,但是别把 cpu 跑到 100% 就行
- # 同时要考虑,服务器并不是 100% 为 nginx 服务,还有其他工作要做,因此不能达到理论峰值
- # max_clients(并发总数) = worker_processes * worker_connections
- worker_connections 1024;
- }
-
- # 核心转储(coredump): 在 Linux 系统中,当进程发生错误或收到信号而终止时,系统会将进程执行时的内存内容(核心映像)写入一个文件(core文件),以作为调试只用,这就是所谓的核心转储(coredump)
-
- # ------------------------------------- HTTP配置
-
- http {
- # 嵌入其他配置文件
- # 语法:include /path/file 绝对路径,指定目录下的指定文件
- # 语法:include path/file 相对路径,指定目录下的指定文件
- # 语法:include path/* 指定目录下的所有文件
- # 语法:include file 当前 nginx.conf 同文件夹下的指定文件
- # 参数既可以是绝对路径也可以是相对路径(相对于 nginx 的配置目录,即 nginx.conf 所在的目录
- include mime.types;
-
- # 响应文件类型
- default_type application/octet-stream;
-
- # 日志格式
- # 语法:log_format 格式名称 格式样式(可以多个)
- # log_format 与 access_log 既可以配置在 http{ ... }里面,也可以配置在虚拟主机 server{ ... } 里面
- # 日志格式样式文章尾部有介绍常用的
- #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
- # '$status $body_bytes_sent "$http_referer" '
- # '"$http_user_agent" "$http_x_forwarded_for"';
- # 例如在加一个日志配置
- # log_format mylog '$remote_addr - $remote_user - $http_user_agent'
-
- # 日志文件的存放路径、格式、缓存大小
- # 语法:access_log 日志存放路径 存放日志的配置格式
- # log_format 与 access_log 既可以配置在 http{ ... }里面,也可以配置在虚拟主机 server{ ... } 里面
- #access_log logs/access.log main;
- # 例如在加一个日志配置
- # access_log logs/access.log mylog;
-
- # 是否使用 sendfile 系统调用来传输文件
- sendfile on;
- #tcp_nopush on;
-
- #keepalive_timeout 0;
- # 超时时间
- keepalive_timeout 65;
-
- #gzip on;
-
- # 每一个 server 就是一个虚拟主机,虚拟站点
- server {
-
- # 监听的端口
- listen 8080;
-
- # 主机名称:其后可以跟多个主机名称,开始处理一个HTTP请求时,nginx 会取出 header 头中的 Host,与每个 server 中的 server_name 进行匹配,以此决定到底由那一个 server 来处理这个请求。
- # 有可能一个 Host 与多个 server 块中的 server_name 都匹配,这时会根据匹配优先级来选择实际处理的 server 块。
- # server_name 与 Host 的匹配优先级见文末。
- server_name localhost;
-
- #charset koi8-r;
-
- #access_log logs/host.access.log main;
-
- # 当浏览器输入地址访问服务器的时候,就会进入到这个里面来匹配
- # 语法:location [=|~|~*|^~] patt { ... }
- # 中括号可以不写任何参数,此时为一般匹配。
- # 匹配类型按大类型可以分为3种:
- # 精确匹配: location = patt { ... }
- # 一般匹配: location patt { ... }
- # 正则匹配: location ~ patt { ... } 例如:location ~ \.(gif|bmp|jpg)$ { ... }
- # location 的使用实例见文末。
- # 注意:location 是有顺序的,当一个请求有可能匹配多个 location 时,实际上这个请求会被第一个 location 处理。
- location / {
- # 匹配的根目录,只写文件名默认在 /nginx 文件夹下
- # 也可以写成绝对路径 root /usr/local/var/dzm;
- root html;
- # 设置默认首页,按先后顺序匹配首页
- index index.html index.htm;
- }
-
- #error_page 404 /404.html;
-
- # redirect server error pages to the static page /50x.html
- #
- error_page 500 502 503 504 /50x.html;
- location = /50x.html {
- root html;
- }
-
- # proxy the PHP scripts to Apache listening on 127.0.0.1:80
- #
- #location ~ \.php$ {
- # proxy_pass http://127.0.0.1;
- #}
-
- # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
- #
- #location ~ \.php$ {
- # root html;
- # fastcgi_pass 127.0.0.1:9000;
- # fastcgi_index index.php;
- # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
- # include fastcgi_params;
- #}
-
- # deny access to .htaccess files, if Apache's document root
- # concurs with nginx's one
- #
- #location ~ /\.ht {
- # deny all;
- #}
- }
-
- # another virtual host using mix of IP-, name-, and port-based configuration
- #
- #server {
- # listen 8000;
- # listen somename:8080;
- # server_name somename alias another.alias;
-
- # location / {
- # root html;
- # index index.html index.htm;
- # }
- #}
-
- # HTTPS server
- #
- #server {
- # listen 443 ssl;
- # server_name localhost;
-
- # ssl_certificate cert.pem;
- # ssl_certificate_key cert.key;
-
- # ssl_session_cache shared:SSL:1m;
- # ssl_session_timeout 5m;
-
- # ssl_ciphers HIGH:!aNULL:!MD5;
- # ssl_prefer_server_ciphers on;
-
- # location / {
- # root html;
- # index index.html index.htm;
- # }
- #}
- include servers/*;
- }
-
server_name 与 Host 的匹配优先级 | 案例 |
---|---|
首先选择所有字符串完全匹配的 server_name | 如:www.testwab.com |
其次选择通配符在前面的 server_name | 如:*.testwab.com |
其次选择通配符在后面的 server_name | 如:www.testwab.* |
最后选择使用正在表达式才匹配的 server_name | 如:~^.testwab.com$ |
log_format 常用的格式样式 | 含义 |
---|---|
$remote_addr | 用于记录客户端 IP 地址,有负载均衡器时,这里就是负载均衡器的 IP 地址 |
$http_x_forwarded_for | 用于记录客户端 IP 地址 |
$remote_user | 用于记录远程客户端用户名称 |
$time_local | 用于记录访问时间与时区 |
$request | 用于记录请求 URL 与 HTTP 协议 |
$time_local | 用于记录访问时间与时区 |
$status | 用于记录请求状态,例如成功时状态为200,页面找不到时状态为404 |
$body_bytes_sent | 用于记录发送给客户端的文件主体内容大小 |
$http_referer | 用于记录是从哪个页面链接访问过来的 |
$http_user_agent | 用于记录客户端浏览器的相关信息 |
- 测试1:location = /demo { }
- 测试2:location /demo { }
- 测试3:location /demo/abc { }
- 测试4:location / { }
-
- location ~ \.(php)$ { ... }
-