学习 Nginx 的一些笔记,命令配置等
学习燕十八的 Nginx 视频教程所做的一些笔记。比较简单杂乱,自己能看懂?
Nginx
-
conf 配置文件
-
html 网页文件
-
logs 日志文件
-
sbin 主要二进制程序
信号量
- kill 信号量 进程号
信号量 | 作用 |
---|---|
TERM,INT | 立刻停止 |
QUIT | 优雅停止 |
HUP | 改变配置文件,平滑的加载配置文件 |
USR1 | 重读日志文件,在日志按月/日分割时有用 |
USR2 | 平滑升级 |
WINCH | 优雅关闭旧的进程(配合 USR2 来进行升级) |
如何获得进程号:
-
通过 ps aux|grep nginx
-
通过 nginx 配置文件查看 pid 写在哪个文件 (如
kill -HUP `cat logs/nginx.pid`
)
控制命令
-
-s s 代表 signal(信号量)
-
nginx -s stop 立刻停止(INT)
-
nginx -s quit 优雅停止(QUIT)
-
nginx -s reload 平滑的加载配置文件(HUP)
-
nginx -s reopen 重读日志文件(USR1)
-
nginx -t 测试配置文件是否出错
配置文件
worker-process 1;//指有一个工作的子进程,可以自行修改,一般设置为 CPU 数*核数
Event{
//一般配置 nginx 连接特性
worker------connections 1024; //指一个子进程最大允许 1024 个连接
}
http{
//配置 http 服务器的主要段
server{
//虚拟主机段
listen 80;//监听端口
server_name xxx.com;//监听的域名或者ip
location / {
root 文件路径,相对于 nginx 根路径
}
access_log logs/host.access.log main;//该 server,访问的日志文件是 logs/host.access.log,格式是 main 格式,可以自定义其他格式
}
}
Location 段
location = patt{} 精准匹配
location patt{} 一般匹配
location ~ patt{} 正则匹配
首先看看有没有精准匹配,如果有停止匹配过程
Rewrite 语法
if 空格 (条件){
重写模式
}
条件的写法:
-
'='来判断是否相等,用于字符串比较
-
'~'用来判断正则匹配(区分大小写),'~*'不区分大小写
-
-f -d -e 来判断是否为文件,为目录,是否存在
例子:
if ($request_mothed=POST){
return 403;
}
//判断浏览器是否是 IE
if ($http_user_agent ~* msie){
rewrite ^.*$ ie.html;
break;//防止循环重定向
}
//如果访问不存在的路径
if (!-e $document_root$fastcgi_script_name){
rewrite ^.*$ 404.html;
break;//仍然要加 break
//或者 rewrite ^.*$ 404.html break;
}
ps:服务器内部的 rewrite 和 302 跳转不一样,内部的 rewrite 上下文没变。
set 是设置变量用的,可以用来达到多条件判断时作标志用。达到 apache 下的 rewrite_condition 的效果
if ($http_user_agent ~* msie){
set $isie 1;/
}
if ($fastcgi_scrip_name = ie.html){
set $isie 0;
}
if ($isie = 1){
rewrite ^.*$ ie.html;//如果是ie浏览器且访问的不是 ie.html 则重定向,作用同上面的 break
}
//url 重写
location /ecshop{
rewrite "goods-(\d{1,7})\.html" /ecshop/goods.php?id=$1;
}
ps:正则里如果有{},正则要用""包括
整合 PHP
Apache 一般是把 PHP 当作自己的模块来启动。
而 Nginx 则是把 HTTP 请求变量(如 get,user_agent 等)转发给 php 进程,与 Nginx 进行通信,称为 fastcgi 运行方式
编译后的php以 fpm(fastcgi)方式运行
把请求的信息转发给 9000 端口的 PHP 进程,让 PHP 处理,指定目录下的 PHP 文件
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
-
碰到 php 文件
-
把根目录定位到 html
-
把请求上下文转交给 php 进程
-
并告诉 php 进程,当前的脚本是 $document_root$fastcgi_script_name,php 就会去找这个脚本并处理
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 4000 # 开始压缩的最小长度(再小就不要压缩了,意义不在)
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压缩标志
可以写在 http,server,location 里
ps:图片,MP3 这样的二进制文件不必压缩,因为压缩比比价小
本作品采用《CC 协议》,转载必须注明作者和本文链接