前两天区听了一堂Nginx的课,然后翻了一下自己之前的Nginx的笔记,做了一个简单的小结。

全局变量

$args : 这个变量等于请求行中的参数,同$query_string

$content_length : 请求头中的Content-length字段

$content_type : 请求头中的Content-Type字段

$document_root : 当前请求在root指令中指定的值

$host : 请求主机头字段,否则为服务器名称

$http_user_agent : 客户端agent信息

$http_cookie : 客户端cookie信息

$limit_rate : 这个变量可以限制连接速率

$request_method : 客户端请求的动作,通常为GETPOST

$remote_addr : 客户端的IP地址

$remote_port : 客户端的端口

$remote_user : 已经经过Auth Basic Module验证的用户名

$request_filename : 当前请求的文件路径,由rootalias指令与URI请求生成

$scheme : HTTP方法(如httphttps

$server_protocol : 请求使用的协议,通常是HTTP/1.0HTTP/1.1

$server_addr : 服务器地址,在完成一次系统调用后可以确定这个值

$server_name : 服务器名称

$server_port : 请求到达服务器的端口号

$request_uri : 包含请求参数的原始URI,不包含主机名,如/foo/bar.php?arg=baz

$uri : 不带请求参数的当前URI$uri不包含主机名,如/foo/bar.html

$document_uri : 与$uri相同

假设请求为http://www.qq.com:8080/a/b/c.php,则

$host:www.qq.com

$server_port:8080

$request_uri:http://www.qq.com:8080/a/b/c.php

$document_uri:/a/b/c.php

$document_root:/var/www/html

$request_filename:/var/www/html/a/b/c.php

主机名(server_name)匹配

从上到下的优先级为从高到低

  1. 明确的server_name名称,如www.qq.com
  2. 前缀通配符,如*.qq.com. qq.com
  3. 后缀通配符,如www.qq.*
  4. 正则表达式,如~[a-z]+\.qq\.com

Location查找规则

从上到下的优先级为从高到低

  1. 等号类型,精确匹配,如location = / {}
  2. ^~类型,前缀匹配,不支持正则,如location ^~ /user {}
  3. ~~*类型,正则匹配,~区分大小写,~*不区分大小写,如location ~ ^/user {}
  4. 常规字符串匹配类型,如location / {}location /user {}

Try_files规则

try_files $uri $uri/ /index.php

假设请求为http://www.qq.com/test,则$uritest

  1. 查找/$root/test文件
  2. 查找/$root/test/目录
  3. 发起/index.php的内部“子请求”

Rewrite规则

rewrite ^/images/(.*).(png|jpg|gif)$ /images?name=$1.$4 last;

上面的rewrite规则会将文件名改写到参数中

last : 相当于Apache的[L]标记,表示完成rewrite

break : 停止执行当前虚拟主机的后续rewrite指令集

redirect : 返回302临时重定向,地址栏会显示跳转后的地址

permanent : 返回301永久重定向,地址栏会显示跳转后的地址

负载均衡

例子如下

upstream backend1 {
server backend1.qq.com weight=5;
server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
server unix:/tmp/backend3 backup;
} upstream backend2 {
ip_hash;
server backend1.qq.com;
server backend2.qq.com;
server backend3.qq.com down;
server backend4.qq.com;
} server {
location / {
proxy_pass http://backend1;
} location /api {
proxy_pass http://backend2;
}
}

查看一个实例

下面是一个 laravel框架Nginx配置的例子,听过这堂课终于了解了下面的原理。

server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on; # 设定网站根目录
root /var/www/laravel/public;
# 网站默认首页
index index.php index.html index.htm; # 服务器名称,server_domain_or_IP 请替换为自己设置的名称或者 IP 地址
server_name server_domain_or_IP; # 修改为 Laravel 转发规则,否则PHP无法获取$_GET信息,提示404错误
location / {
try_files $uri $uri/ /index.php?$query_string;
} # PHP 支持
location ~ \.php$ {
try_files $uri /index.php =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}

我们主要关注两个location,假设地址是http://www.qq.com/user/info,会匹配到如下location

    location / {
try_files $uri $uri/ /index.php?$query_string;
}

由于$uri$uri/是不存在的,所以会走/index.php?$query_string,这时候会发起一个内部“子请求”,“子请求”会重新匹配location,然后匹配到如下location

    location ~ \.php$ {
try_files $uri /index.php =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

这样请求就会发送到fastcgi去做处理。

Nginx配置小结的更多相关文章

  1. Nginx 配置简述

    不论是本地开发,还是远程到 Server 开发,还是给提供 demo 给人看效果,我们时常需要对 Nginx 做配置,Nginx 的配置项相当多,如果考虑性能配置起来会比较麻烦.不过,我们往往只是需要 ...

  2. 【nginx配置】nginx做非80端口转发

    一个场景 最近在使用PHP重写一个使用JAVA写的项目,因为需要查看之前的项目,所以要在本地搭建一个Tomcat来跑JAVA的项目.搭建成功后,因为Tomcat监听的端口是8080,因此,访问的URL ...

  3. [转帖]nginx配置ssl加密(单/双向认证、部分https)

    nginx配置ssl加密(单/双向认证.部分https) https://segmentfault.com/a/1190000002866627   nginx下配置ssl本来是很简单的,无论是去认证 ...

  4. Nginx配置信息损毁又无备份时如何恢复

    worker_processes *; 本文介绍在Nginx配置信息出现问题后,在没有备份的情况下,如何利用Nginx进程的虚拟内存恢复配置信息. 问题背景 假设 /etc/nginx/site-av ...

  5. 基于HTTPS的接口测试——nginx配置SSL

    目录 基于HTTPS的接口测试--nginx配置SSL 1. 背景 2. 所需环境与域名备案解析 2.1 云服务器 2.2 域名 2.3 SSL证书 2.4 网站备案 2.5 域名解析 3.nginx ...

  6. nginx配置反向代理或跳转出现400问题处理记录

    午休完上班后,同事说测试站点访问接口出现400 Bad Request  Request Header Or Cookie Too Large提示,心想还好是测试服务器出现问题,影响不大,不过也赶紧上 ...

  7. Windos环境用Nginx配置反向代理和负载均衡

    Windos环境用Nginx配置反向代理和负载均衡 引言:在前后端分离架构下,难免会遇到跨域问题.目前的解决方案大致有JSONP,反向代理,CORS这三种方式.JSONP兼容性良好,最大的缺点是只支持 ...

  8. Windows下Nginx配置SSL实现Https访问(包含证书生成)

    Vincent.李   Windows下Nginx配置SSL实现Https访问(包含证书生成) Windows下Nginx配置SSL实现Https访问(包含证书生成) 首先要说明为什么要实现https ...

  9. Nginx配置详解

    序言 Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的.从2004年发布至今,凭借开源的力量,已经接近成熟与完善. Nginx功能丰富,可作为HTTP服务器,也 ...

随机推荐

  1. MyBatis映射器元素

     映射器是MyBatis最强大的工具,也是我们使用MyBatis时用的最多的工具,映射器中主要有增删改查四大元素,来满足不同场景的需要: 下面是主要元素的介绍:         select:查询语句 ...

  2. Attempt to invoke interface method 'boolean java.util.List.add(java.lang.Object)' on a null object reference

    尝试在一个空的对象引用上引用boolean java.util.List.add()这个方法: 错误例子: private ArrayList<String> classList; cla ...

  3. 反射Reflection创建

    step one:(找入口) using System.Reflection; //引用需要用到的命名空间 做任何事都要有开始的地方,不例外,反射也要先找到反射的入口,举个栗子: Assembly a ...

  4. 设计模式——备忘录模式(C++实现)

    #include <iostream> #include <string> #include <vector> using namespace std; class ...

  5. Python3基础教程1——Python的环境搭建

    2018年3月8日 当然推荐一个比较系统的教程 http://www.runoob.com/python3/python3-tutorial.html 人家也写的也比我好啦 本教程为新手向的,请大佬跳 ...

  6. 简单了解C语言内嵌汇编

    最近看自旋锁的实现,自选锁的循环查找锁的主要实现类似如下,该实现使用到了内嵌的汇编(摘自sanos内核,源代码有2处实现,一处使用intel汇编,是没有问题的,另一处使用内嵌汇编语法,源代码中为cmp ...

  7. three.js 实现全景以及优化(2)

    继昨天全景实现后,再做了一个全景图切换实验; code:https://github.com/Thinkia/threejs_/blob/master/test/test1-panorama/inde ...

  8. 前端dom元素的操作优化建议

    参考自:http://blog.csdn.net/xuexiaodong009/article/details/51810252 其实在web开发中,单纯因为js导致性能问题的很少,主要都是因为DOM ...

  9. nodejs文件操作模块FS(File System)常用函数简明总结(转)

    件系统操作相关的函数挺多的.首先可以分为两大类. 一类是异步+回调的. 一类是同步的. 在这里只对异步的进行整理,同步的只需要在函数名称后面加上Sync即可 1. 首先是一类最常规的读写函数,函数名称 ...

  10. 详解小白利用eclipse+CDT+MinGW搭建C++开发环境

    安装JDK.安装Eclipse     2.打开Eclipse 找到“help”下的“Eclipse marketplace” 如图:    3.选择相应的C插件: 因为安装过所以显示installe ...