nginx配置文件详解

配置文件中没有出现的配置全部会使用 默认的配置
nginx 文档地址 http://nginx.org/en/docs/
需要注意的:
1:nginx配置语言其实是一种微型语言
2:nginx中使用的变量是nginx自动解析存储的可以看看nginx常量的笔记
3:nginx 调用 fastcgi 模块程序其实就是类似于调用另一个程序可以传递变量,就像 这种(fastcgi_param SCRIPT_FILENAME d o c u m e n t r o o t document_root documentrootfastcgi_script_name; ) 其实就是将nginx 中的变量组成新的变量赋值给 SCRIPT_FILENAME ,然后在调用的fastcgi的时候吧这个变量传递过去,关于这些变量名字这都是协议约定好的,可以看看 fastcgi 的协议
4:配置文件中 event节点是整体服务器的工作模式和连接数上限,http 节点是作为http服务器的配置, http节点中可以有多个 server 节点每一个server节点用不同的域名区分开,就是不同的虚拟机
5:fastcgi_params; # 这个是变量文件就是把需要传递给 fastcgi 程序的变量都写进去了如果需要修改那么就在下面继续重新赋值就好了,因为每个 location 或 server 节点的 root等可能不同,那么这个 在不同的节点 include 这个变量文件时 生成的变量的具体值也不同,
6:其实 PHP中输出的$_SERVER 中的值大部分是 nginx在调用fastcgi 程序时传过去的参数
7:location 匹配规则得看笔记,location可以有很多个但是一次访问中生效的只会是一个他们之间按规则有部分可以嵌套可以跳转。
8:这个nginx配置是很灵活的,可以自己随意配置
9: 在location 中修改 传递给 fastcgi 的变量要在 include fastcgi_params 之后 否则 不会起作用
无效:
fastcgi_param CESHI 333;
include fastcgi_params;
有效:
include fastcgi_params;
fastcgi_param CESHI 333;

10:在 location中可以使用 allow 和 deny 配合控制访问权限
例如 location / { #匹配到这个节点时候执行这个节点下的配置
#只允许172.16.50.173,其他全部拒绝
allow 172.16.50.173;
deny all;
#只允许172.16.50.0/254,其他全部拒绝
allow 172.16.50.0/254;
deny all;
#只拒绝172.16.50.173,其他全部允许
allow all;
deny 172.16.50.173;
}
deny 172.16.50.173; #拒绝172.16.50.173
allow all; #允许全部,意思就是允许除了172.16.50.173的其他全部IP访问

user www; #运行用户
worker_processes auto; # worker角色的进程个数(nginx启动后会启动一个master进和N个worker进程,而N由这个参数决定 。master不处理请求,而是根据相应配置文件信息管理worker进程 master进程负责接收客户端的请求并将任务合理的分配给多个worker,每个worker进程主要负责处理请求)怎么确定个数?不知道怎么设置时可以设置auto,或者 cpu的个数或者核数(最理想的worker_processes值取决于很多因素,包含但不限于CPU的核数,存储数据的硬盘驱动器个数,以及负载模式当其中任何一个因素不确定的时候,将其设置为cpu核数或许是一个比较好的初始值,“自动”也基本是如此确认一个参数值的。
“自动”这个参数值是从nginx 1.3.8和nginx 1.2.5 开始进行支持的,自动参数可以自动检测 cpu cores 并设置 worker_processes 参数 。)

// 设置日志格式
log_format access ‘$remote_addr - r e m o t e u s e r [ remote_user [ remoteuser[time_local] “$request” $status b o d y b y t e s s e n t " body_bytes_sent " bodybytessent"http_referer" “$http_user_agent” $http_x_forwarded_for’;
#日志格式,以下具体介绍变量
r e m o t e a d d r 与 remote_addr 与 remoteaddrhttp_x_forwarded_for #用以记录客户端的 ip 地址;
$remote_user #用来记录客户端用户名称;
$time_local #用来记录访问时间与时区;
$request #用来记录请求的 url 与 http 协议;
$status #用来记录请求状态;成功是 200;
$body_bytes_s ent #记录发送给客户端文件主体内容大小;
$http_referer #用来记录从那个页面链接访问过来的;
$http_user_agent 浏览器内核等信息
日志例子(当无值的时候是 - ):192.168.112.126 - - [03/Dec/2018:10:16:04 +0800] “GET /favicon.ico HTTP/1.1” 404 391 “http://m.test.com/” “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36” “-” “0.000”
access_log /var/log/nginx/access.log main; 所有的日志全部记录在这,如果路径不从 / 开始那么该路径就是相对于 nginx 安装目录的路径
error_log /var/log/nginx/error.log; #全局错误日志

#工作模式及连接数上限
events {
use epoll; #epoll 是多路复用 IO(I/O Multiplexing)中的一种方式,但是仅用于 linux2.6以上内核,可以大大提高 nginx 的性能
worker_connections 2000; #单个后台 worker process 进程的最大并发链接数 (每一个worker进程能并发处理(发起)的最大连接数(包含所有连接数)不能超过最大文件打开数(可以使用 ulimit -a 查看最大文件打开数))
}

#设定 http 服务器,利用它的反向代理功能提供负载均衡支持
http {
include /etc/nginx/mime.types; #引入 mime 文件
default_type application/octet-stream; #默认的类型,只有当 mime.types没有匹配中的时候采用这种方式
access_log /usr/local/nginx/logs/access.log; #设定日志文件
sendfile on; #sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件, 对于普通应用,必须设为 on,如果用来进行下载等应用磁盘 IO 重负载应用,可设置为 off,以平衡磁盘与网络 I/O 处理速度,降低系统的 uptime.
keepalive_timeout 65; #参数设置一个请求完成之后还要保持连接多久,不是请求时间多久,目的是保持长连接,减少创建连接过程给系统带来的性能损耗,类似于线程池,数据库连接池。
tcp_nodelay on;
gzip on; #开启 gzip 压缩
gzip_types text/plain application/javascript text/css application/xml text/javascript;
gzip_min_length 1k;
gzip_comp_level 5;

    #设定fastcgi 设置  如果不指定会使用默认设置 (具体设置可以看nginx官网)
fastcgi_buffers 8 128k;  #设置用于从FastCGI服务器读取响应的缓冲区number和size单个连接。默认情况下,缓冲区大小等于一个内存页面。这是4K或8K,具体取决于平台。
fastcgi_buffer_size 128k;  #设置size用于读取从FastCGI服务器接收的响应的第一部分的缓冲区。这部分通常包含一个小的响应头。默认情况下,缓冲区大小等于一个内存页面。这是4K或8K,具体取决于平台。然而,它可以做得更小。

client_max_body_size   20m;  限制上传文件的大小 当超出限制后会返回413 ,

#两个参数干的是一件事: 它为请求头分配一个缓冲区。 如果请求头大小大于指定的缓冲区,则使用large_client_header_buffers指令分配更大的缓冲区 ,这些缓冲区仅在缺省缓冲区不足时按需分配。 当处理请求或连接转换到保持活动状态时,释放缓冲区
client_header_buffer_size 1k;
large_client_header_buffers 4 4k;

    # upstream  节点设定负载均衡的服务器列表
    upstream myserver {
            #weigth 参数表示权值,权值越高被分配到的几率越大
            server 192.168.8.1:3128 weight=5;
            server 192.168.8.2:80 weight=1;
            server 192.168.8.3:80 weight=6;
    }

#server 节点
server {
listen 80; #侦听 80 端口
server_name a.test.com; #定义使用该server节点的域名
root /var/nginx/html; 也可以在这里指定 整个server节点的根目录,每个location也可以指定各自的根目录如果没,location 中指定的 root 优先级最高
access_log /var/log/nginx/www.xxx.com_access.log access; //设定该节点的访问日志
error_page 500 502 503 504 /50x.html; # 定义该节点错误提示页面
location = /50x.html { // 当发生50x.html 的页面的时候走这个节点
root /root;
}
#当匹配到这个location时 主动寻找 index 配置项对应的文件去跳转访问
location / {
index index.php index.html index.htm; #默认主文件按顺序依次访问
if ($request_method ~ ‘HEAD’) {
access_log off; // 设置如果是 head请求不记录日志
}
}

这个是正则匹配,有 ~ 就是正则匹配模式

        	location ~ \.php$ {
            	fastcgi_pass 127.0.0.1:9000; //指定转发到本机的 9000端口处理,(php-fpm正在监控9000端口 )

include fastcgi_params; # 这个是变量文件就是把需要传递给 fastcgi 程序的变量都写进去了如果需要修改那么就在下面继续重新赋值就好了
fastcgi_param SCRIPT_FILENAME d o c u m e n t r o o t document_root documentrootfastcgi_script_name; # SCRIPT_FILENAME 这个参数的值是 d o c u m e n t r o o t document_root documentrootfastcgi_script_name
}
#静态文件要求客户端缓存指定时间,这样会在响应头中设置上缓存时间
location ~ .*.(gif|jpg|jpeg|png|bmp|swf|properties|ico|js|css|ttf|woff|svg|eot|woff2)$
{
expires 1d; #缓存 1 天,取值单位 expire 30s; 30m; 10h; 1d;
access_log off; #访问静态文件不记录日志
}
例如设置要求客户端缓存的时候可以看到在响应头有体现:

}
}
include vhosts/*.conf;

实例server:
1:当访问 a.test.com 的时候会去找 文件 /var/nginx/html/test/b.php
当访问a.test.com/aa/ 的时候会去找文件 /var/nginx/html/test/aa/b.php
server {
server_name a.test.com; #主机域名
root /var/nginx/html/test; #
listen 80; # 监听端口
rewrite_log on; # 允许重写 uri
location / {
index b.php;
}
#正则匹配 当最后是 .php的时候就走这个节点
location ~ .php($|/) {
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME r e a l p a t h r o o t realpath_root realpathrootfastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
}
# 记录日志
error_log /var/nginx/logs/test_error.log debug;
access_log /var/nginx/logs/test_access.log main;
}
2:不写index ,只写 fastcgi_index
当访问 b.test.com的时候会去找 /var/nginx/html/test/index.php 文件
server {
server_name b.test.com;
root /var/nginx/html/test;
listen 80;
rewrite_log on;
location / {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php; # 和 b.php 任写一个 会发现uri 中没有 .php 的时候就会把这个配置项配置的参数 添加到 uri 后面
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME r e a l p a t h r o o t realpath_root realpathrootfastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
}

error_log /var/nginx/logs/test_error.log debug;
access_log /var/nginx/logs/test_access.log main;

}

3:隐藏所有的.php 后缀的模式
location / {
try_files u r i / i n d e x . p h p uri /index.php uri/index.phpis_argsKaTeX parse error: Expected 'EOF', got '#' at position 6: args;#̲所有的访问都改造成 a.tes…) {
fastcgi_pass 127.0.0.1:9000;
fastcgi_split_path_info ^(.+.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME r e a l p a t h r o o t realpath_root realpathrootfastcgi_script_name;
fastcgi_param DOCUMENT_ROOT KaTeX parse error: Expected 'EOF', got '}' at position 115: … internal; }̲ location ~ \.… {
return 404;
}

写的不太好只是自己整理的,如果有错误请通知我

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值