基本配置

配置文件基本结构
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
26
27
28
29
# nginx.conf

... #全局块

events { #events块
...
}

http #http块
{
... #http全局块
server #server块
{
... #server全局块
location [PATTERN] #location块
{
...
}
location [PATTERN]
{
...
}
}
server
{
...
}
... #http全局块
}
全局块

配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。

1
2
3
4
5
6
7
8
9
#user  nobody;
worker_processes 1; #允许生成的进程数,默认为1

#全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

#pid logs/nginx.pid; #进程文件
events块

配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。

1
2
3
4
5
events {
#charset utf-8; #默认编码
keepalive_timeout 65; #连接超时时间,默认为75s,可以在http,server,location块。
worker_connections 1024; #最大连接数,默认为512
}
http块

可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
http {

default_type text/plain; #默认文件类型,默认为text/plain
keepalive_timeout 65; #连接超时时间,默认为75s,可以在http,server,location块。
#charset utf-8; #默认编码
server_names_hash_bucket_size 128; #服务器名字的hash表大小
client_header_buffer_size 32k; #上传文件大小限制
large_client_header_buffers 4 64k; #设定请求缓
client_max_body_size 8m; #设定请求缓


# gzip模块设置
gzip on; #开启gzip压缩输出
gzip_min_length 1k; #允许压缩的页面的最小字节数,页面字节数从header偷得content-length中获取.默认是0,不管页面多大都进行压缩.建议设置成大于1k的字节数,小于1k可能会越压越大
gzip_buffers 4 16k; #表示申请4个单位为16k的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果
gzip_http_version 1.1; #压缩版本(默认1.1,目前大部分浏览器已经支持gzip解压.前端如果是squid2.5请使用1.0)
gzip_comp_level 2; #压缩等级.1压缩比最小,处理速度快.9压缩比最大,比较消耗cpu资源,处理速度最慢,但是因为压缩比最大,所以包最小,传输速度快
gzip_types text/plain application/x-javascript text/css application/xml;
#压缩类型,默认就已经包含text/html,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn.
gzip_vary on;#选项可以让前端的缓存服务器缓存经过gzip压缩的页面.例如:用squid缓存经过nginx压缩的数据
}
server块

配置虚拟主机的相关参数,一个http中可以有多个server。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
http {
... # http块配置

server {
keepalive_requests 120; #单连接请求上限次数。
listen 4545; #监听端口
server_name 127.0.0.1; #监听地址
location ~*^.+$ { #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
deny 127.0.0.1; #拒绝的ip
allow 192.168.0.0; #允许的ip
}
}

server {
... # server块配置
}

}
location块

配置请求的路由,以及各种页面的处理情况。

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
26
27
28
29
30
31
32
33
34
http {
... # http块配置

server {
... # server块配置

location ~*^.+$ { #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
#root path; #根目录
#index vv.txt; #设置默认页
alias path; #默认情况下,本地文件的路径是 root 指令设定根目录的相对路径,通过 alias 指令可以将匹配的访问路径重新指定为新定义的文件路径
proxy_pass http://mysvr; #请求转向mysvr 定义的服务器列表
deny 127.0.0.1; #拒绝的ip
allow 172.18.5.54; #允许的ip
try_files $uri $uri/ /index.html; #按照路径来找页面,找不到就用最后一个,主要用于单页面的路径配置,刷新之后如果没有相应的路径就跳转到首页
}

# 配置地址拦截转发,解决跨域验证问题
location /oauth/{
proxy_pass https://192.168.0.1:8001/oauth/; # 配置proxy_pass代理转发时,如果在proxy_pass后面的url加/,表示绝对根路径;如果没有/,表示相对路径,会把匹配的路径部分也给代理走。
proxy_set_header HOST $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

# 图片缓存时间设置
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
expires 10d;
}
# JS和CSS缓存时间设置
location ~ .*\.(js|css)?$ {
expires 1h;
}
}
}
举个例子(前端本地访问静态文件-用于解决跨域问题)
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#nginx.conf

#user nobody;
worker_processes 2;

events {
worker_connections 1024;
}

#http块
http {

#开启压缩
gzip on;
gzip_comp_level 4;
gzip_vary on;
gzip_types image/png text/plain application/javascript text/css application/xml font/woff text/javascript;

#server块
server {
listen 8001; #监听的端口
server_name localhost; #服务器地址

#location块
location / {
root D:/wn244/test; #配置主目录
index index.html index.htm; #配置当前地址页面
try_files $uri $uri/ /index.html; #按照路径来找页面,找不到就用最后一个,主要用于单页面的路径配置,刷新之后如果没有相应的路径就跳转到首页
}

location /static {
alias D:/wn244/test/static;
}

location /api {
proxy_pass http://ip:port;
}
}

}

nginx常用命令

1
2
3
4
5
6
7
nginx -c /usr/local/nginx/conf/nginx.conf  #启动nginx(windows下start nginx)
nginx -s quit #停止ngix
nginx -s reload #重新载入nginx(当配置信息发生修改时)
nginx -s reopen #打开日志文件
nginx -v #查看版本
nginx -t #查看nginx的配置文件的目录
nginx -h #查看帮助信息

windows杀死所有nginx进程

1
taskkill /f /t /im nginx.exe

具体功能介绍

rewrite

rewrite 对用户的 URI 用正则表达式的方式进行重写,并跳转到新的 URI。语法:rewrite regex replacement [flag];

重点:replacement 是重写 URI 的改写规则。当改写规则以”http://“”https://“或”$scheme”开头时,Nginx 重写该语句后将停止执行后续任务,并将改写后的 URI 跳转返回客户端。

这句话的意思是:当replacement 是以”http://“”https://“或”$scheme”开头时,在浏览器端访问的网址会直接变化,变成replacement所表示的地址。而当replacement 不已以上规则开头时,访问的页面文件会根据规则发送变化,但是在浏览器端显示网址是不会发送变化的,以下是具体情形:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
http {
... # http块配置

server {
... # server块配置
loaction / {
root D:/wn244/test; #配置主目录
index index.html index.htm; #配置当前地址页面
}

location =/login {
rewrite /login /; #当前情况下,在浏览器端访问/login页面时,会访问到/地址的页面,但是浏览器上显示的地址还是/login
}
location =/home {
rewrite /home https://www.baidu.com; #这种情况下,在浏览器端访问/home页面时,浏览器会直接跳转到https://www.baidu.com页面,浏览器的地址也会变化,变成https://www.baidu.com
}
}

}