学习 Nginx 的一些笔记,命令配置等

学习燕十八的 Nginx 视频教程所做的一些笔记。比较简单杂乱,自己能看懂?

Nginx

  • conf 配置文件

  • html 网页文件

  • logs 日志文件

  • sbin 主要二进制程序

信号量

  • kill 信号量 进程号
信号量 作用
TERM,INT 立刻停止
QUIT 优雅停止
HUP 改变配置文件,平滑的加载配置文件
USR1 重读日志文件,在日志按月/日分割时有用
USR2 平滑升级
WINCH 优雅关闭旧的进程(配合 USR2 来进行升级)

如何获得进程号:

  1. 通过 ps aux|grep nginx

  2. 通过 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;

}
  1. 碰到 php 文件

  2. 把根目录定位到 html

  3. 把请求上下文转交给 php 进程

  4. 并告诉 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 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!