Nginx 实战案例

本贴最后更新于 2039 天前,其中的信息可能已经渤澥桑田

一、前提条件

<font size=4>1、Nginx 编译安装
2、Nginx 中文文档

二、代理类型

>****正向代理:**** A想向C借钱,但是C不认识A所以不借给他,然后A就通过B向C借钱,B借到钱之后再转交给A,在这个过程中B就扮演了一个正向代理的角色,这个过程中,真正借钱的人是谁,C是不知道的

反向代理: A 想向 C 借钱,然后 C 借给他了,但是实际上这个钱可能 C 向 B 借的~至于钱到底是谁的,A 是不知道的

二、实战案例

2.1.反向代理

``` server { listen 80; server_name doodblog.linkdood.cn; access_log /data/Yunwei/nginx/logs/doodblog_access.log main; location / { proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Host $server_name; proxy_set_header X-Real-IP $remote_addr; proxy_pass http://172.16.8.185:8080; } }
</font>
### 2.2.负载均衡
<font size=4>
>****upstream模块:**** 提供负载均衡、故障转移等功能

|****负载均衡类型****|||
|:----:|:-:|:-:|
|****类型****|****描述****|****备注****|
|Round Robin|轮训|依次分配|
|Weight|权重|根据分配权重成比例分配|
|ip_hash|IP哈希|根据IP哈希结果分配|
|fair|根据后端服务器响应时间|第三方插件|
|url_hash|根据访问url哈希|第三方插件|

|****设备状态****|||
|:--:|:-:|:-:|
|****状态****|****描述****|****备注****|
|down|当前服务器不提供服务| |
|weight|设置权重,数值越大,权重越高|默认:1 |
|max_fails|如失败次数超过最大值,返回proxy_next_upstream 模块定义的错误|默认:1|
|backup|备用服务器,当所有非backup机器down或忙的时候,请求backup机器| |
|fail_timeout  max_fails|达到多少次失败后,暂停多长时间| |

负载均衡及案例

upstream index_test {
ip_hash;
server 127.0.0.1:8000 weight=1;
server 127.0.0.1:8001 weight=2 down;
server 127.0.0.1:8002 weight=2;
server 127.0.0.1:8003 weight=2 backup;
server 127.0.0.1:8004 weight=2 max_fails=3 fail_timeout=30s;
}

server {
listen 80;
server_name wiki.liandoudou.com.cn;
access_log /data/soft/nginx/logs/wiki_access.log main;
location / {
proxy_pass http://index_test;
}
}






</font>

### 2.3.下载列表
<font size=4>
>***root、alias区别***
****alias:**** 访问/download/android路径,实际去找 /data/packages/client/anr/comm 目录
****root:**** 访问/download/ios路径,实际去找/data/packages/client/anr/comm/download/ios目录

server {
listen 80;
server_name doodblog.linkdood.cn;
access_log /data/Yunwei/nginx/logs/doodblog_access.log main;
# alias 指定程序路径
location /download/android {
alias /data/packages/client/anr/comm;
autoindex on;
}
# root 指定程序路径
location /download/ios {
root /data/packages/client/anr/comm;
autoindex on;
}
}

</font>

### 2.4.代理PHP程序
<font size=4>

server {
listen 80;
server_name getip.linkdood.cn;

location ~ \.php$ {
    root   /data/Yunwei/nginx/html;
    include        fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
}
# 关闭favicon提示
location /favicon.ico {
    log_not_found off;
    access_log off;
}

}

</font>

### 2.5.正则表达式
<font size=4>

|正则符合|正则描述|备注|
|:-----:|
|\\|转义符| |
|^|匹配字符开始位置| |
|$|匹配字符结束位置| |
|.*|匹配任意字符串| |
|~|区分大小写| |
|~*|不区分大小写|
|!~|区分大小写,不匹配| |
|!~*|不区分大小写,不匹配| |
|(x\|y\|z)|或匹配,x或y或z| |
|-f|判断文件是否存在| |
|-d|判断目录是否存在| |
|-e|判断文件或目录是否存在| |
|-x|判断是否为可执行文件| |

#不区分大小写,匹配(at|bg0|hd|ht|pm|wc)
location ~* /(at|bg0|hd|ht|pm|wc)(.*) {
root /data/linkdood/data/bigdata;
}

</font>


### 2.6.rewrite重定向
<font size=4>

|重定向标记|标记描述|备注|
|:--:|
|last|相当于apache里面的[L]标记,表示rewrite| |
|break|本条规则匹配完成后,终止匹配,不再匹配后面的规则| |
|redirect|返回302临时重定向,浏览器地址会显示跳转后的URL地址| |
|permanent|返回301永久重定向,浏览器地址会显示跳转后的URL地址| |

将所有 http 请求,永久重定向到 https

rewrite ^(.*) https://host$1 permanent;

www.linkdood.cn/doodlog/ 永久重定向到 doodblog.linkdood.cn

rewrite ^/connect$ http://connect.myweb.com permanent;
rewrite ^/connect/(.*)$ http://connect.myweb.com/$1 permanent;

将 doodblog.linkdood.cn 永久重定向到 www.linkdood.cn/doodlog/

if ($host = "doodblog.linkdood.cn"){
rewrite ^/(.*)$ http://www.linkdood.cn/doodlog/$1 permanent;
}

将 linkdood.cn 跳转到 www.linkdood.cn

if ($host != 'www.linkdood.cn' ) {
rewrite ^/(.*)$ http://www.linkdood.cn/$1 permanent;
}

将 doodlog.linkdood.cn/image/下面数字 + png 的图片跳转到 404

rewrite ^/image/([0-9]+).png$ /404.html last;

</font>

### 2.7.访问限制
<font size=4>
>***allow、deny 属于模块(ngx_http_access_module***)
****allow:**** 允许IP或IP段访问,区间:http、server、location、limit_except
****deny:**** 拒绝IP或IP段访问,区间:http、server、location、limit_except

#屏蔽单个 IP 的命令是
deny 192.168.1.1
#封整个段即从 123.0.0.1 到 123.255.255.254 的命令
deny 123.0.0.0/8
#封 IP 段即从 123.45.0.1 到 123.45.255.254 的命令
deny 124.45.0.0/16
#封 IP 段即从 123.45.6.1 到 123.45.6.254 的命令是
deny 123.45.6.0/24

location / {
deny 192.168.1.1;
allow 192.168.1.0/24;
allow 10.1.1.0/16;
allow 2001:0db8::/32;
deny all;
}

禁止 htaccess

location ~//.ht {
deny all;
}

禁止/data 目录

location ~ ^/data {
deny all;
}

禁止单个文件

location ~ /www/log/123.log {
deny all;
}

</font>

### 2.8.访问限速
<font size=4>
>****limit_req:**** 限制请求数
****limit_conn:**** 限制并发连接数

****限制单IP并发数****

#并发及带宽限制,对单个 IP 限制最大 2 个连接数,每个连接最大限速 100k
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
...
server {
...
location /download/ {
limit_conn addr 2;
limit_rate 100k;
}
}
}

测试: -c 并发请求数 -n 总请求数 -k 保持 KeepAlive

ab -n100 -c100 -k doodblog.linkdood.cn

****限制单会话请求数****

单 IP 最大请求数为 1 个/s,最大 5 个延迟请求,超过立即返回 503

http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
...
server {
...
location /search/ {
limit_req zone=one burst=5 nodelay;
}
}
}


</font>

  • 服务

    提供一个服务绝不仅仅是简单的把硬件和软件累加在一起,它包括了服务的可靠性、服务的标准化、以及对服务的监控、维护、技术支持等。

    41 引用 • 24 回帖
  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    311 引用 • 546 回帖 • 58 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...