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. python之udp协议的套接字

    udp是无链接的,先启动哪一端都不会报错 udp服务端 1 ss = socket() #创建一个服务器的套接字 2 ss.bind() #绑定服务器套接字 3 inf_loop: #服务器无限循环 ...

  2. Linux使用退格键时出现^H + Tab键命令补全失效/方向键失效 + ls文件夹和文件没有颜色

    删除问题 安装kalilinux使用普通用户的的时候按退格键无法实现删除功能 解决的办法有两个 一改变快捷键: 使用Ctrl+Backspace组合键可以实现删除功能 ctrl + backspace ...

  3. android样式之按钮&&图片

    在drawable-hdpi中添加xml文件 <?xml version="1.0" encoding="utf-8"?> <selector ...

  4. grep 正则匹配

    \{0,n\}:至多n次 \{\ 匹配/etc/passwd文件中数字出现只是数字1次到3次 匹配/etc/grub2.cfg文件以一个空格开头匹配一个字符的文件的所有行 显示以LISTEN结尾的行 ...

  5. 如何使用AsyncTask

    1 如何使用handler,安卓规定只能再UI线程里面刷新UI,但是不能再UI线程里面执行耗时操作.所以我们要把耗时操作放在子线程里,然后把要刷新UI的操作传递到handler里面,然后在由Handl ...

  6. linux如何使make输出makefile中所有的规则和变量

    答: make -p (会执行makefile,加入-q可以阻止makefile的执行)

  7. mysql的 深度使用 - 游标 , 定时器, 触发器 的使用 ?

    游标 叶叫做 光标; 只能使用在 mysql的 存储过程 或函数中! 游标的概念? 为什么要使用 游标? 什么叫 定时器, 就是事件 event! 是在 mysql 5.0以上的版本中, 才能使用支持 ...

  8. P1552 [APIO2012]派遣

    链接 https://www.luogu.org/problemnew/show/P1552 思路 忍者数量肯定越多越好 那就从下到上的合并它的孩子 左偏树的话 顺便维护一个tot,大头堆,如果tot ...

  9. (转)renren-fast解读(二)

    (二期)9.renren-fast项目解读(二) [课程九]jwt.xmind36.4KB [课程九]动态数据源.xmind0.2MB JWT 概要 JWT是一种用于双方之间传递安全信息的简洁的.UR ...

  10. Windows进程的内核对象句柄表

    当一个进程被初始化时,系统要为它分配一个句柄表.该句柄表只用于内核对象 ,不用于用户对象或GDI对象. 创建内核对象 当进程初次被初始化时,它的句柄表是空的.然后,当进程中的线程调用创建内核对象的函数 ...