Nginx相关

标签(空格分隔): nginx 享学


安装部署

  • 通过源代码的方式安装
  • 使用
    • ./sbin/nginx #启动
    • ./sbin/nginx -t #检查是否有错
    • ./sbin/nginx -s reload #重新加载

具体的使用

location 匹配规则

  1. = 全匹配
  2. ^~ 前缀匹配
  3. ~ 正则匹配
  4. ~* 正则不区分大小写匹配
  5. 空格前缀匹配。这种匹配和^~匹配方式一样,但是它是在正则之后匹配
location /taobao {
rewirte ^(.*) http://www.baidu.com #重定向
}
location / {
root html;
index index.html index.htm;
}

虚拟主机

我理解的虚拟主机就和IIS的虚拟主机差不多,可以让nginx监听多个端口。同时也可以配置通过不同的server_name过来的数据能够独立处理

虚拟主机可以单独配置到不同的文件中。然后在nginx.conf里面引用

一般配置路径是:/etc/nginx/con.d

引用:include /etc/nginx/con.d/*.conf

alias的使用(配合root学习)

root与alias主要区别在于nginx如何解释location后面的uri,这会使两者分别以不同的方式将请求映射到服务器文件上。

root的处理结果是:root路径+location路径

alias的处理结果是:使用alias路径替换location路径

alias是一个目录别名的定义,root则是最上层目录的定义。

还有一个重要的区别是alias后面必须要用“/”结束,否则会找不到文件的。。。而root则可有可无~~

注意:

  1. 使用alias时,目录名后面一定要加"/"。
  2. alias在使用正则匹配时,必须捕捉要匹配的内容并在指定的内容处使用。
  3. alias只能位于location块中。(root可以不放在location中)
  4. 都是对预置变量rootPath赋值

参考文章[ http://www.nginx.cn/4658.html ]

rewrite的使用

rewrite regex replacement [flag]

location / {
rewrite ^/(.*) http://www.czlun.com/$1 permanent;
}

rewrite就是重定向的意思,从上面的示例可以看到有1个关键字和3个参数

参数 说明
regex 表示匹配url的正则表达式,不包含ip和端口那部分。
replacement 表示跳转后的地址,$1表示正则匹配的第一个值,如果不需要参数,上面的正则可以写为^/
flag 这个值总共有四个选项,如果为空,则类似于last,但是会将rewrite执行完
  • last #本条规则匹配完成后,继续向下匹配新的location URI规则
  • break #本条规则匹配完成即终止,不再匹配后面的任何规则, url不会变
  • redirect #返回302临时重定向,浏览器地址会显示跳转后的URL地址
  • permanent #返回301永久重定向,浏览器地址栏会显示跳转后的URL地址

set命令

就是赋值

set $a 32;

proxy_pass 反向代理

反向代理就是将请求的地址代理到其它地址去,浏览器地址会发生变化。 [ https://blog.csdn.net/zhongzh86/article/details/70173174 ]

location /proxy/ {
proxy_pass http://127.0.0.1/;
}
  • 关于代理地址后面的斜杠/

    • 没有斜杠表示相对路径,将全url追加到新代理的url
    • 有斜杠表示绝对路径,闭包,匹配成功的内容不追加到新url
  • 另外路径里面的/proxy/后面的斜杠也会影响匹配结果

  • 复杂的代理里面还可以通过正则获取url里面的内容并拼装为新的url进行代理

    location ~* /wap/(\d+)/(.+)
    {
    proxy_pass http://mx$1.test.com:6601/$2?$args;
    }

upstream 负载均衡

1.在http节点下,加入upstream节点。

upstream linuxidc {
server 10.0.6.108:7080;
server 10.0.0.85:8980;
}

2.将server节点下的location节点中的proxy_pass配置为:http:// + upstream名称,即“http://linuxidc”.

location / {
root html;
index index.html index.htm;
proxy_pass http://linuxidc;
}

默认是轮询,每个ip访问一次。

  • 轮询
  • 权重 weight
  • ip_hash 可以解决session问题
  • fair 根据服务器响应时间动态分配
  • url_hash 根据url进行hash,同一个请求落到一台服务器

3.注意

  • 如果存在不能轮询的情况,也有可能是浏览器缓存问题

Nginx请求执行阶段

http://wangjixiang.iteye.com/blog/2255553

  1. rewrite阶段
  2. access阶段
  3. content阶段
  4. 其他阶段
location=/{
set $a 32;
echo $a; set $a 64;
echo $a;
}

上面的代码将输出2个64。这里就涉及到Nginx的执行阶段问题了。

index作用

示例

location / {
root html;
index index.html;
}

这里的index是根据url匹配,如果url的结尾不是/,那么就不会去匹配index,因为此时会被当作文件,因此不需要默认文件

内置变量

if语句

https://www.cnblogs.com/songxingzhu/p/6382007.html

  1. if语句没有else

-f, !-f:判断指定的路径是否为存在且为文件;

-d, !-d:判断指定的路径是否为存在且为目录;

-e, !-e:判断指定的路径是否存在,文件或目录均可;

-x, !-x:判断指定路径的文件是否存在且可执行;

跨域处理

location / {
  // 没有配置OPTIONS的话,浏览器如果是自动识别协议(http or https),那么浏览器的自动OPTIONS请求会返回不能跨域
  if ($request_method = OPTIONS ) {
    add_header Access-Control-Allow-Origin "$http_origin";
    add_header Access-Control-Allow-Methods "POST, GET, PUT, OPTIONS, DELETE";
    add_header Access-Control-Max-Age "3600";
    add_header Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept, Authorization";
    add_header Access-Control-Allow-Credentials "true";
    add_header Content-Length 0;
    add_header Content-Type text/plain;
    return 200;
  }
  add_header 'Access-Control-Allow-Origin' '$http_origin';
  add_header 'Access-Control-Allow-Credentials' 'true';
  add_header 'Access-Control-Allow-Methods' 'GET, PUT, POST, DELETE, OPTIONS';
  add_header 'Access-Control-Allow-Headers' 'Content-Type,*';
  proxy_pass http://127.0.0.1:8080;
  
  }
}

防盗链

location ~* \.(gif|jpg|png|jpeg)$ {
valid_referers *.baidu.com *.google.com;
if ($invalid_referer) {
return 404;
}
}

防止客户端保存图片

缓存

location ^~ /qq.png{
#expires 2s;#缓存2秒
expires 2m;#缓存2分钟
}

压缩

https配置

首先把服务的定义代码贴出来

server {
listen 443 ssl; #注意这里的端口和ssl
server_name localhost; ssl_certificate server/server.crt;
ssl_certificate_key server/server_nopass.key; location / {
root html;
index index.html index.htm;
}
}
  1. 通过./sbin/nginx -V查看是否安装https模块

    --with-http_ssl_module代表安装了的

  2. 执行四步生成ssl上面的server.crt和erver_nopass.key文件

    1.openssl genrsa -des3 -out server.key 1024

    提示输入密码,就输入123456。会再次确认密码

    2.openssl req -new -key server.key -out server.csr

    提示输入密码就输入:123456,输入国家:cn,输入省份:cq,其它的直接按回车

    3.openssl rsa -in server.key -out server_nopass.key

    提示输入密码就输入:123456

    4.openssl x509 -req -days 365 -in server.csr -signkey server_nopass.key -out server.crt

  3. 就按上面的服务配置就可以了

keepalived高可用

可以把keepalived和nginx当作独立的两个程序。keepalived主要是用来提供一个虚拟的ip地址,我们把这个ip称为vip。当主服务器挂了的时候,从服务器就自动暴露一个vip出来。

  1. 首先需要安装keepalived

重点说明

  1. Peter老师提到的,根据url进行分割,然后通过location判断命中和未命中的path。根据最后的/去决定是否将命中的路径加进去。

    同时对于rootalias也适用这种方式。
  2. 高可用、高并发。死了还能用就是高可用
  3. keepalived也可以和tomcat实现高可用

有时间研究一下:

  • 源码安装 nginx 的时候 配置上 --with-debug 可以看到 nginx执行的每一步,很好使,有小伙伴用的没
  • 阿里云带宽收费标准
  • 回顾那次公司使用的服务守护程序

学到第三课了(09-18)

Nginx自学笔记的更多相关文章

  1. 《Linux内核设计与实现》课本第四章自学笔记——20135203齐岳

    <Linux内核设计与实现>课本第四章自学笔记 进程调度 By20135203齐岳 4.1 多任务 多任务操作系统就是能同时并发的交互执行多个进程的操作系统.多任务操作系统使多个进程处于堵 ...

  2. 《Linux内核设计与实现》课本第三章自学笔记——20135203齐岳

    <Linux内核设计与实现>课本第三章自学笔记 进程管理 By20135203齐岳 进程 进程:处于执行期的程序.包括代码段和打开的文件.挂起的信号.内核内部数据.处理器状态一个或多个具有 ...

  3. 《Linux内核设计与实现》课本第十八章自学笔记——20135203齐岳

    <Linux内核设计与实现>课本第十八章自学笔记 By20135203齐岳 通过打印来调试 printk()是内核提供的格式化打印函数,除了和C库提供的printf()函数功能相同外还有一 ...

  4. 正向代理与反向代理的区别【Nginx读书笔记】(zz)

    正向代理与反向代理的区别[Nginx读书笔记]       正向代理的概念 正向代理,也就是传说中的代理,他的工作原理就像一个跳板,简单的说,我是一个用户,我访问不了某网站,但是我能访问一个代理服务器 ...

  5. python自学笔记

    python自学笔记 python自学笔记 1.输出 2.输入 3.零碎 4.数据结构 4.1 list 类比于java中的数组 4.2 tuple 元祖 5.条件判断和循环 5.1 条件判断 5.2 ...

  6. Nginx学习笔记4 源码分析

    Nginx学习笔记(四) 源码分析 源码分析 在茫茫的源码中,看到了几个好像挺熟悉的名字(socket/UDP/shmem).那就来看看这个文件吧!从简单的开始~~~ src/os/unix/Ngx_ ...

  7. ssh自学笔记

    Ssh自学笔记 Ssh简介 传统的网络服务程序,如:ftp.pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据.而且,这些服务 ...

  8. JavaScript高级程序设计之自学笔记(一)————Array类型

    以下为自学笔记. 一.Array类型 创建数组的基本方式有两种: 1.1第一种是使用Array构造函数(可省略new操作符). 1.2第二种是使用数组字面量表示法. 二.数组的访问 2.1访问方法 在 ...

  9. Nginx学习笔记~目录索引

    回到占占推荐博客索引 前几天整理了<Docker的学习笔记索引>,受到了很多朋友的关注,今天把Nginx的文章也整理一下,以后将永久更新,像大叔之前的<EF文章系列>,< ...

随机推荐

  1. php路由

    打开httpd.ini添加: RewriteRule (.*)$ /index\.php\?s=$1 [I] 高版本打开web.Config添加节点:<rewrite> <rules ...

  2. ql常见面试题 受用了

    //转至:http://www.cnblogs.com/GT_Andy/archive/2009/12/25/1921911.html 1. 用一条SQL 语句 查询出每门课都大于80 分的学生姓名 ...

  3. FileZilla连接腾讯云Centos7

    现在需要使用ftp快速上传资料去云机备份, 于是想到FileZilla. 生成密匙文件 登录腾讯云--ssh密匙 FileZilla Client 导入密匙文件 填写登录信息 连接 另外记得开放22端 ...

  4. Android图片裁剪解决方案 -- 从相册截图

    在看Storage Access Framework,里面有一个加载相册图片的程序片断,可能是系统版本的问题,无法返回结果,这里找到一个适用于旧版本的方法. 在Android开发中,可以轻松调用一个I ...

  5. PO VO BO DTO POJO DAO之间的关系

    J2EE开发中大量的专业缩略语很是让人迷惑,尤其是跟一些高手讨论问题的时候,三分钟就被人家满口的专业术语喷晕了,PO VO BO DTO POJO DAO,一大堆的就来了. PO:persistant ...

  6. tp5 中使用自定义扩展类和函数

    如果是要引用其它控制器里定义的方法参考:https://www.cnblogs.com/efyefy/p/8796014.html 如果在extend定义的类和函数默认是在全局命名空间下的 new \ ...

  7. Spring 学习——Resources接口

    Resources 针对资源文件的统一接口 Resources UrlResource:URL对应的资源,只需要一个url即可构建 ClassPathResource:获取类路径下的资源文件 File ...

  8. uniGUI试用笔记(二)

    前几天做的demo今天启动后,浏览器打开页面后死活不显示窗体,找了半天原因才发现是360浏览器启动了兼容模式,改成极速模式后就正常了.有点晕.... 今天简单测试了TUniGUIServerModul ...

  9. Python 模块的加载顺序

    基本概念 module 模块, 一个 py 文件或以其他文件形式存在的可被导入的就是一个模块 package 包,包含有 init 文件的文件夹 relative path 相对路径,相对于某个目录的 ...

  10. Face Aging with Conditional Generative Adversarial Network 论文笔记

    Face Aging with Conditional Generative Adversarial Network 论文笔记 2017.02.28  Motivation: 本文是要根据最新的条件产 ...