默认配置文件
开头的表示注释内容
1
2 #user nobody;
3 worker_processes 1;
4
5 #error_log logs/error.log;
6 #error_log logs/error.log notice;
7 #error_log logs/error.log info;
8 #error_log "pipe:rollback logs/error_log interval=1d baknum=7 maxsize=2G";
9
10 #pid logs/nginx.pid;
11
12
13 events {
14 worker_connections 1024;
15 }
16
17
18 http {
19 include mime.types;
20 default_type application/octet-stream;
21
22 #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
23 # '$status $body_bytes_sent "$http_referer" '
24 # '"$http_user_agent" "$http_x_forwarded_for"';
25
26 #access_log logs/access.log main;
27 #access_log "pipe:rollback logs/access_log interval=1d baknum=7 maxsize=2G" main;
28
29 sendfile on;
30 #tcp_nopush on;
从配置文件开始到 events 块之间的内容,主要会设置一些影响nginx 服务器整体运行的配置指令,主要包括配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。
比如上面第一行配置的:
worker_processes 1;
这是 Nginx 服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的制约,一般有多少个CPU核就配置多少。
我将worker_processes设置成8;一共启动8个工作进程,master进程只有1个
[root@mylinux2 conf]# ps -ef | grep nginx
root 1529 1 0 08:47 ? 00:00:00 nginx: master process nginx
nobody 1530 1529 0 08:47 ? 00:00:00 nginx: worker process
nobody 1531 1529 0 08:47 ? 00:00:00 nginx: worker process
nobody 1532 1529 0 08:47 ? 00:00:00 nginx: worker process
nobody 1533 1529 0 08:47 ? 00:00:00 nginx: worker process
nobody 1534 1529 0 08:47 ? 00:00:00 nginx: worker process
nobody 1535 1529 0 08:47 ? 00:00:00 nginx: worker process
nobody 1536 1529 0 08:47 ? 00:00:00 nginx: worker process
nobody 1537 1529 0 08:47 ? 00:00:00 nginx: worker process
root 1546 1472 0 08:55 pts/0 00:00:00 grep --color=auto nginx
events {
worker_connections 1024;
}
events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大连接数等。
上述例子就表示每个 work process 支持的最大连接数为 1024.
这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置。
一、http 全局块
http全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。
18 http {
19 include mime.types;
29 sendfile on;
33 keepalive_timeout 65;
37 server {
38 listen 80;
39 server_name localhost;
45
46 location / {
47 root html;
48 index index.html index.htm;
49 }
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
二、server 块
这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。后面会详细介绍虚拟主机的概念。
每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。
而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。
1、全局 server 块
最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或IP配置。
1)、listen
该指令用于配置网络监听。主要有如下三种配置语法结构:
1 listen *:80 | *:8080 #监听所有80端口和8080端口
2 listen IP_address:port #监听指定的地址和端口号
3 listen IP_address #监听指定ip地址所有端口
4 listen port #监听该端口的所有IP连接
2)、server_name
该指令用于虚拟主机的配置。通常分为以下两种:
a、基于名称的虚拟主机配置
语法格式如下:
server_name www.abc123.com;
b、基于 IP 地址的虚拟主机配置
语法结构和基于域名匹配一样,而且不需要考虑通配符和正则表达式的问题。
server_name 192.168.1.1
案例1:通过nginx设置了2台虚拟主机,让不同的域名访问不同的目录,Nginx的虚拟机主机Server配置(配置百度项目和腾讯项目)
server {
listen 80;
server_name www.server1.com;
location / {
root /usr/local/tengine-2.3/baidu;
index index.html index.htm;
}
}
server {
listen 80;
server_name www.server2.com;
location / {
root /usr/local/tengine-2.3/qq;
index index.html index.htm;
}
}
访问服务器
用户访问百度的过程,而我们配置hosts的目的则是不用访问DNS服务器
2、location 块
一个 server 块可以配置多个 location 块。
这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也可以是IP别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。
该指令用于匹配 URL。
语法如下:
location [ = | ~ | ~* | ^~] uri {
}
1、= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。
2、~:用于表示 uri 包含正则表达式,并且区分大小写。
3、~*:用于表示 uri 包含正则表达式,并且不区分大小写。
4、^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。
注意:如果 uri 包含正则表达式,则必须要有 ~ 或者 ~* 标识。
优先级: = > ^~ > ~ / ~* >模糊匹配
案例2
访问http://www.server1.com/abc.html,会到/usr/local/tengine-2.3/baidu目录下找abc.html文件,abc.html一定是精确匹配
访问http://www.server1.com/zilv.html,会匹配成功,会到/usr/local/tengine-2.3/qq目录下找zilv.html文件,但是qq目录下根本就没有zilv.html文件,所以找不到。模糊匹配
访问http://www.server1.com/index.html,会匹配成功,会到/usr/local/tengine-2.3/qq目录下找index.html文件,而qq目录下有index.html文件,所以会有返回
访问http://www.server1.com/documents,会匹配成功(能匹配到2个,分别为’/‘和‘/documents/’,’/’的优先级最低,),会到/usr/local/tengine-2.3/baidu目录下找index.html文件,而/baidu目录下有index.html文件,所以会有返回
37 server {
38 listen 80;
39 server_name www.server1.com;
51 location = /abc.html {
52 root /usr/local/tengine-2.3/baidu;
53 }
54 location / {
55 index index.html;
56 root /usr/local/tengine-2.3/qq;
57 }
58 location /documents/ {
59 root /usr/local/tengine-2.3/baidu;
60 }
61 location ^~ /images/ {
62 root /usr/local/tengine-2.3/baidu;
63 }
64 location ~* \.(gif|jpg|jepg)$ {
65 root /usr/local/tengine-2.3/baidu;
66 }
3、index
该指令用于设置网站的默认首页。
语法为:
index filename ...;
后面的文件名称可以有多个,中间用空格隔开。
index index.html index.htm;
通常该指令有两个作用:第一个是用户在请求访问网站时,请求地址可以不写首页名称;第二个是可以对一个请求,根据请求内容而设置不同的首页。
location / {
root /usr/local/tengine-2.3/baidu;
index index.html index.htm;
}
案例3
访问http://www.server1.com/index.html
访问http://www.server1.com/index.htm
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/123377.html