0x07 nginx杂记

目录

1. nginx返回头包含服务器相关信息,在分布式环境定位问题


1
2
3
4
5
6
7
server{
...
if ($server_addr ~* "((\d+)\.(\d+))$") {
set $server_addr_tail $1;
}
add_header ser $server_addr_tail;
}

效果如下:
2016-06-01_170233.png

2.给nginx开启文件目录模式,用于文件下载

1
2
3
4
5
6
location /download{
root /zen/data/;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
}

3.给nginx开启简单加密模式

  1. 修改nginx配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
location /download/ {
# 下载目录为 /home/myname/download
root /home/myname;

# 设置目录浏览
autoindex on;

# 默认为on,显示出文件的确切大小,单位是bytes。
# 改为off后,显示出文件的大概大小,单位是kB或者MB或者GB
autoindex_exact_size off;

# 默认为off,显示的文件时间为GMT时间
# 注意:改为on后,显示的文件时间为文件的服务器时间
autoindex_localtime on;

# 在第一次访问目录时,会弹出输入验证框
auth_basic "Restricted";

# 存放密码的文件,/etc/nginx/passwd/download
auth_basic_user_file passwd/download;

# 设置charset,解决中文乱码问题
charset utf-8,gbk;
}

2)修改密码配置文件
输入用户名和密码(密码会在第三步被替换)

vi /etc/nginx/passwd/download

1
admin:admin
  1. 设置 admin 的密码(apt-get install apache2-utils):
1
htpasswd /etc/nginx/passwd/download admin

4)重启nginx

1
service nginx restart

参考:http://wenzhixin.net.cn/2013/10/19/nginx_http_auth

4.查看nginx安装了哪些模块

1
nginx -V

5.nginx中获取自定义header

如果自定义header为CUSTOM_HEAD则,在nginx中的变量http_custom_head对应它的值。也就是:http_header小写变量

6.设置请求头

proxy_set_header Host $http_host;
proxy_set_header X-Forward-For $remote_addr;

7.nginx黑白名单

1
2
3
4
5
6
7
8
deny IP; 
deny subnet;
allow IP;
allow subnet;
# block all ips
deny all;
# allow all ips
allow all;

这样设置以后,该服务器上所有的网站都会按照这个设置来拒绝或允许访问。如果想只针对某个网站,可以在具体的网站的配置中加入:

1
2
3
4
location / { 
allow 192.168.0.0/24;
deny all;
}

这样就只允许192.168.0.0网段的ip访问,其他ip访问会返回一个403错误。

还可以自定义一个403错误的页面,可以在/usr/local/nginx/html下新建个error403.html文件,里面按照html的语法写个文档,写上一些说明文字。
然后编辑nginx.conf,加入:

1
2
3
4
error_page   403  /error403.html; 
location = /error403.html {
root html;
}

8.window版本nginx

启动:nginx.exe 或者 start nginx.exe

重载:nginx.exe -s reload

关闭:nginx -s stop 或taskkill /F /IM nginx.exe > nul

window下 nginx http concat模块的版本: http://pan.baidu.com/s/1hrAdm0c

参考:http://www.cnblogs.com/chuncn/archive/2011/10/14/2212291.html

9.cors

方式一:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
location ^~ /api  {
set $cors "";
if ($http_origin ~* (\.eagleon\.id|\.eagleon\.com)) {
set $cors "true";
}

proxy_set_header Cookie $http_cookie;
proxy_pass http://tomcat.eagleon;

if ($cors = "true") {
add_header 'Access-Control-Allow-Origin' "$http_origin";
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, DELETE, PUT';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Headers' 'User-Agent,Keep-Alive,Content-Type';
}
if ($request_method = OPTIONS) {
add_header Access-Control-Allow-Origin $http_origin;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
add_header Access-Control-Allow-Credentials true;
add_header Access-Control-Allow-Headers DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type;
add_header Access-Control-Allow-Headers Content-Type;
add_header Access-Control-Max-Age 1728000;
return 204;
}
}

方式二:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#跨域访问
map $http_origin $corsHost {
default 0;
"~http://www.123admin.com" http://www.123admin.com;
"~https://www.123admin.com" https://www.123admin.com;
"~http://m.123admin.com" http://m.123admin.com;
"~http://wap.123admin.com" http://wap.123admin.com;
}

server {
listen 80;
server_name search.123admin.com;
root /nginx;
location / {
add_header Access-Control-Allow-Origin $corsHost;
add_header Access-Control-Allow-Headers Content-Type;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
add_header Access-Control-Allow-Credentials true;
# 其他逻辑
}
}