Skip to content

Commit df49756

Browse files
author
Songyu
committed
更新文章
1 parent 444e064 commit df49756

16 files changed

+803
-55
lines changed

_posts/2020-02-04-nginxh中return的用法.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
layout: post
33
title: "nginxh中return的用法"
44
date: 2020-02-04 21:24:29 +0800
5-
tags:
5+
tags: nginx
66
description:
77
---
88

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
---
2+
layout: post
3+
title: "nginx中return的使用"
4+
date: 2020-02-19 14:52:57 +0800
5+
tags: nginx
6+
description:
7+
---
8+
9+
### nginx中return关键字,可以在server、location、if中使用
10+
11+
### 直接返回链接
12+
{% highlight nginx %}
13+
server{
14+
..
15+
..
16+
return http://www.baidu.com;
17+
}
18+
{% endhighlight nginx %}
19+
20+
### 返回字符串
21+
{% highlight nginx %}
22+
server{
23+
..
24+
..
25+
return 200 "error";
26+
}
27+
{% endhighlight nginx %}
28+
29+
### 返回变量
30+
{% highlight nginx %}
31+
server{
32+
..
33+
..
34+
return 200 "$host$request_uri";
35+
}
36+
{% endhighlight nginx %}
37+
38+
### HTML代码
39+
{% highlight nginx %}
40+
server{
41+
..
42+
..
43+
return 200 "<html><script>window.location.href='$host$request_uri'</script></html>";
44+
}
45+
{% endhighlight nginx %}
46+
47+
### json
48+
{% highlight nginx %}
49+
server{
50+
..
51+
..
52+
return 200 '{"name":"muyu","id":1}';
53+
}
54+
{% endhighlight nginx %}

_posts/2020-02-19-nginx代理.md

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
---
2+
layout: post
3+
title: "nginx代理"
4+
date: 2020-02-19 15:31:13 +0800
5+
tags: nginx
6+
description:
7+
---
8+
9+
## 正向代理
10+
11+
{% highlight nginx %}
12+
server{
13+
listen 80 default_server;
14+
resolver 119.29.29.29//国内公共NDS
15+
location / {
16+
proxy_pass http://$host$request_uri;
17+
}
18+
}
19+
{% endhighlight nginx %}
20+
dns.lisect.com 全国公众DNS服务器大全
21+
22+
## 反向代理
23+
由于浏览器的默认访问端口是80,所以很多时候需要让80端口来代理8080端口,使访问更加方便
24+
{% highlight nginx %}
25+
server{
26+
27+
listen 80;
28+
server_name www.example.com;
29+
30+
locatino / {
31+
proxy_pass http://127.0.0.1:8080;
32+
proxy_set_header Host $host;
33+
#真实IP
34+
proxy_set_header X-Real-IP $remote_addr;
35+
#访问IP
36+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
37+
}
38+
}
39+
{% endhighlight nginx %}
40+
41+
proxy_pass http:// (https://) + 域名或IP + 端口
42+
43+
> proxy_set_header 设置代理服务器的header信息
44+
> proxy_set_header field value
45+
> field 更改项目或者变量名,如host
46+
> Value 变量值
47+
> 未设置得话,则为默认为proxy_pass后的值
48+
49+
通过这种访问方式可以直接将域名指向到8080端口,前提是,需要对这个域名对8080也进行解析
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
---
2+
layout: post
3+
title: "nginx得rewrite规则"
4+
date: 2020-02-19 14:22:17 +0800
5+
tags: nginx
6+
description:
7+
---
8+
9+
rewrite格式
10+
> 格式:rewrite regex replacement [flag]
11+
>
12+
> rewrite配置可以在server、location以及if配置段内生效
13+
>
14+
> regex是用于匹配URI的正则表达式,其不会匹配到$host(域名)
15+
>
16+
> replacement是目标跳转的URI,可以以http://或者https://开头,也可以省略掉$host,直接写$request_uri部分(即请求的链接)
17+
>
18+
> flag,用来设置rewrite对URI的处理行为,其中有break、last、rediect、permanent
19+
>
20+
> rediect和permanent的区别在于,前者为临时重定向(302),而后者是永久重定向(301),对于用户通过浏览器访问,这两者的效果是一致的。但是,对于搜索引擎蜘蛛爬虫来说就有区别了,使用301更有利于SEO。所以,建议replacemnet是以http://或者https://开头的flag使用permanent。
21+
>
22+
> break和last如果直接在server中使用的话,并没有明显的区别,都是匹配到规则的话,直接进行访问,如果在location中的话,break不会跳出当前location,继续按照匹配的规则继续执行;如果是last的话,会跳出当前location,匹配其他的location
23+
24+
### break和last的说明
25+
26+
现在有如下rewrite规则
27+
{% highlight nginx %}
28+
server{
29+
....
30+
....
31+
location / {
32+
rewrite /1.html /2.html;
33+
rewrite /2.html /3.html;
34+
}
35+
36+
location /2.html {
37+
rewrite 2.html a.html;
38+
}
39+
40+
location /3.html {
41+
rewrite 3.html b.html;
42+
}
43+
44+
}
45+
{% endhighlight nginx %}
46+
直接访问的话,会按照这个顺序,进行跳转**1.html => 2.html ; 2.html => 3.html ; 3.html => b.html**
47+
48+
如果在第一个location中的第一行,接口加上break
49+
50+
{% highlight nginx %}
51+
server{
52+
....
53+
....
54+
location / {
55+
rewrite /1.html /2.html break;
56+
rewrite /2.html /3.html;
57+
}
58+
59+
location /2.html {
60+
rewrite 2.html a.html;
61+
}
62+
63+
location /3.html {
64+
rewrite 3.html b.html;
65+
}
66+
67+
}
68+
{% endhighlight nginx %}
69+
70+
访问的时候,匹配到break就直接停止继续访问了, 1.html => 2.html
71+
72+
如果把break改为last的话
73+
74+
{% highlight nginx %}
75+
server{
76+
....
77+
....
78+
location / {
79+
rewrite /1.html /2.html last;
80+
rewrite /2.html /3.html;
81+
}
82+
83+
location /2.html {
84+
rewrite 2.html a.html;
85+
}
86+
87+
location /3.html {
88+
rewrite 3.html b.html;
89+
}
90+
91+
}
92+
{% endhighlight nginx %}
93+
当访问匹配到到last时,当前location下面的规则不在匹配,继续匹配其他符合条件的location规则,所以应该是 **1.html => 2.html ; 2.html => a.html**的访问结果
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
---
2+
layout: post
3+
title: "nginx防盗链设置"
4+
date: 2020-02-19 15:07:31 +0800
5+
tags: nginx
6+
description:
7+
---
8+
9+
### 应用场景
10+
> 对于一些图片资源来说,如果可能不希望随意去使用,这样的话,在nginx中可以使用valid_referers来进行设置
11+
12+
{% highlight nginx %}
13+
location ~* \.(gif|jpg|png|webp)$ {
14+
valid_referers mybolg.com *.mybolg.com
15+
if ($invalid_referer) {
16+
return 403;
17+
}
18+
}
19+
{% endhighlight nginx %}
20+
21+
这段规则的含义就是,如果不是从mybolg.com域名下获取图片,会直接返回403代码
22+
23+
### valid_referers的参数:
24+
25+
none---请求包头没有Referer字段,直接图片网址获取图片的情况
26+
27+
blocked--Referer字段存在,但是没有了https或者http开头,可能被防火墙或者代理服务器改变所致
28+
29+
server_names--允许的服务器域名,我们在使用时可以仅仅使用该项即可
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
---
2+
layout: post
3+
title: "nginx访问控制"
4+
date: 2020-02-21 09:47:40 +0800
5+
tags: nginx
6+
description:
7+
---
8+
9+
简单来说,nginx的访问控制其实就是一些匹配规则配合allow/deny address | unix: | CIDR | all
10+
> address IP地址
11+
> CIDR IP段
12+
> unix: socker地址
13+
> all 全部
14+
15+
{% highlight nginx %}
16+
server{
17+
...
18+
...
19+
allow 127.0.0.1;
20+
deny all;
21+
}
22+
{% endhighlight nginx %}
23+
24+
上述配置表示,只有127.0.0.1可以进行访问,其他的全部拒绝
25+
26+
### location
27+
28+
{% highlight nginx %}
29+
location ~ ".html|\.ht" {
30+
deny all;
31+
}
32+
{% endhighlight nginx %}
33+
34+
对于匹配规则中的第一个".html"来说,符号"."代表的是任意字符,而后面的"\.ht"中的符号"."之前加了转义符,才是真正的符号".",所以上述规则对于链接中或后面含有html的请求,或者带有".ht"的链接,都会拒绝访问
35+
36+
### $document_uri
37+
38+
$document_uri,其实大体上跟location规则一致,只是写法不同,对于上述规则来说,写法如下
39+
{% highlight nginx %}
40+
if($document_uri的控制 ~ ".html|\.ht") {
41+
deny all;
42+
}
43+
{% endhighlight nginx %}
44+
45+
### $request_uri
46+
47+
基于$request_uri的控制,$request_uri包含参数,所以多用于参数的匹配规则
48+
{% highlight nginx %}
49+
location ~ "gid=\d{4,9}" {
50+
deny all;
51+
}
52+
{% endhighlight nginx %}
53+
如果gid后面得参数是数字且长度在4到9之间,就会拒绝访问
54+
55+
### $http_user_agent
56+
57+
对于一些异常的访问,我们可以通过user_agent来发现他的规律,并拒绝
58+
{% highlight nginx %}
59+
if ($user_agent ~ 'YisouSpider|MJ12bot/v1.4.2|YoudaoBot|Tomato')
60+
{
61+
deny all;
62+
}
63+
{% endhighlight nginx %}
64+
对于user_agent中包含以上关键字的,将会拒绝
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
---
2+
layout: post
3+
title: "nginx负载均衡"
4+
date: 2020-02-21 09:12:35 +0800
5+
tags: nginx
6+
description:
7+
---
8+
9+
>在有些情况下,服务器访问量过大,单一服务器无法承受,这时候就用到了nginx负载均衡的特性
10+
11+
> 负载均衡其实也是一种反向代理
12+
13+
在http中定义一组upstream,然后在proxy_pass中使用定义好得upsteam,然后nginx在访问得时候,就会将请求发送到服务器中
14+
15+
{% highlight nginx %}
16+
http{
17+
upstream www{
18+
server 192.168.0.1;
19+
server 192.168.0.2;
20+
server 192.168.0.3;
21+
}
22+
23+
server{
24+
25+
listen 80;
26+
server_name muyu.com;
27+
28+
location / {
29+
proxy_pass http://www/;
30+
proxy_set_header Host $host;
31+
#真实IP
32+
proxy_set_header X-Real-IP $remote_addr;
33+
#访问IP
34+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
35+
}
36+
}
37+
}
38+
{% endhighlight nginx %}
39+
40+
这样配置之后,对于访问到nginx的请求会平均的分配到upstream中的IP组,如果想指定一下IP的分配权重,只需要在每个IP后面加上weight参数即可
41+
42+
{% highlight nginx %}
43+
upstream www{
44+
server 192.168.0.1 weight=1;
45+
server 192.168.0.2 weight=2;
46+
server 192.168.0.3 weight=1;
47+
}
48+
{% endhighlight nginx %}
49+
50+
设置之后,分配0.2的数量是0.1和0.3的两倍,0.1和0.3的分配数量相同
51+
52+
这样配置之后,对于同一个IP的访问来说,请求的到upstream的每个IP都是随机的,可以第一次是第一个IP,到第二次请求就会变成第二个IP,这样就会导致登录状态丢失等问题
53+
54+
解决这个问题也很简单,只需要在upstream中加入nginx中自带的ip_hash算法,就可以保证用一个IP访问时,请求到的总是upstream中的同一IP
55+
56+
{% highlight nginx %}
57+
upstream www{
58+
server 192.168.0.1 weight=1;
59+
server 192.168.0.2 weight=2;
60+
server 192.168.0.3 weight=1;
61+
ip_hash
62+
}
63+
{% endhighlight nginx %}

0 commit comments

Comments
 (0)