前两天区听了一堂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. 使用zxing生成解析二维码

    1. 前言 随着移动互联网的发展,我们经常在火车票.汽车票.快餐店.电影院.团购网站以及移动支付等各个场景下见到二维码的应用,可见二维码以经渗透到人们生活的各个方面.条码.二维码以及RFID被人们应用 ...

  2. Python Django的生产部署方式

    本地化部署的Django有很大的局限性,无法用于生产环境,比如无法抗住多并发,无法长时间的运行,容易造成网页无响应的问题.所以如何将Django部署到真正的生产环境中,让其能够真正的像正常的网页一样工 ...

  3. Scala学习笔记(二)

    Scala面向对象: 类: 声明类(一个源文件中可以包含很多public的类) getter和setter 构造函数(主构造器和附属构造器) 继承(extends) 重写父类方法(override d ...

  4. Appserv(Apache) 配置ssl证书

    一:打开httpd.conf文件,移除注释的行: Include conf/extra/httpd-ahssl.conf LoadModule ssl_module modules/mod_ssl.s ...

  5. PAT乙级-1063. 计算谱半径(20)

    在数学中,矩阵的"谱半径"是指其特征值的模集合的上确界.换言之,对于给定的n个复数空间的特征值{a1+b1i, ..., an+bni},它们的模为实部与虚部的平方和的开方,而&q ...

  6. ATM+购物商城完整版

    一,需求:模拟实现一个ATM + 购物商城程序 要求如下: 1.额度15000或者自定义 2.实现购物商城,买东西加入购物车,调用信用卡接口结账 3.可以提现,手续费5% 4.支持多账户登陆 5.支持 ...

  7. 关于JDK和eclipse的安装和汉化

    参考网址:http://jingyan.baidu.com/article/f96699bb8b38e0894e3c1bef.html http://titanseason.iteye.com/blo ...

  8. jQuery中的ajax的相关方法

    JQuery对Ajax操作进行了封装,$.ajax()方法属于最底层的方法,第2层是load().$.get().$.post()方法,第3层是$.getScript()和$.getJSON()方法. ...

  9. Go a lot of way but I go back to the original point

    I try a lot of blog platform and even construct my blog website. But I have to say I just want to ha ...

  10. Algorithm --> 两个栈实现队列和两个队列实现栈

    两个栈实现队列和两个队列实现栈 队列(queue)先进先出的线性表:栈(stack)先进后出的线性表. 两个栈实现队列 法一思路: s1是入栈的,s2是出栈的. 入队列:直接压入s1即可: 出队列:如 ...