1. 安装Nginx

在Linux系统中安装Nginx,详见全新Linux使用入口中的Nginx安装

2. 基础配置

Nginx的配置文件nginx.conf位于其安装目录的conf目录下。

nginx.conf由多个块组成,最外面的块是main,main包含Events和HTTP,HTTP包含upstream和多个Server,Server又包含多个location:

main(全局设置)、server(主机设置)、upstream(负载均衡服务器设置)和 location(URL匹配特定位置的设置)。

  • main块设置的指令将影响其他所有设置;
  • server块的指令主要用于指定主机和端口;
  • upstream指令主要用于负载均衡,设置一系列的后端服务器;
  • location块用于匹配网页位置。

2.1 Nginx的全局配置

代码如下:

1
2
3
4
5
6
7
8
worker_processes 1;
error_log logs/error.log notice;
pid logs/nginx.pid;

events{
use epoll;
worker_connections 1024;
}

每个配置选项的含义解释如下:

  • worker_processes是个主模块指令,指定了Nginx要开启的进程数。每个Nginx进程平均耗费10M~12M内存。建议指定和CPU的数量一致即可。

  • error_log是个主模块指令,用来定义全局错误日志文件。日志输出级别有debug、info、notice、warn、error、crit可供选择,其中,debug输出日志最为最详细,而crit输出日志最少。

  • pid是个主模块指令,用来指定进程pid的存储文件位置。

  • events事件指令是设定Nginx的工作模式及连接数上限:

    use是个事件模块指令,用来指定Nginx的工作模式。Nginx支持的工作模式有select、poll、kqueue、epoll、rtsig和/dev/poll。其中select和poll都是标准的工作模式,kqueue和epoll是高效的工作模式,不同的是epoll用在Linux平台上,而kqueue用在BSD系统中。对于Linux系统,epoll工作模式是首选。

    worker_connections用于定义Nginx每个进程的最大连接数,默认是1024。

2.2 HTTP服务器配置

Nginx对HTTP服务器相关属性的配置代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
http{
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$gzip_ratio"';
access_log /var/local/webLogs/nginx/nginx-access.log main;
error_log /var/local/webLogs/nginx/nginx-error.log main;
client_max_body_size 20m;
client_header_buffer_size 32K;
large_client_header_buffers 4 128k;
Sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 60;
client_header_timeout 10;
client_body_timeout 10;
send_timeout 10;
gzip on;
# 引用其他具体链接配置
include servers.conf;
}

下面详细介绍下这段代码中每个配置选项的含义:

  • include是个主模块指令,实现对配置文件所包含的文件的设定,可以减少主配置文件的复杂度。类似于Apache中的include方法。

  • default_type属于HTTP核心模块指令,这里设定默认类型为二进制流,也就是当文件类型未定义时使用这种方式,例如在没有配置PHP环境时,Nginx是不予解析的,此时,用浏览器访问PHP文件就会出现下载窗口。

  • log_format是Nginx的HttpLog模块指令,用于指定Nginx日志的输出格式。

    • main为此日志输出格式的名称,可以在下面的access_log指令中引用。
  • access_logerror_log是日志保存地址

  • client_max_body_size用来设置允许客户端请求的最大的单个文件字节数;

  • client_header_buffer_size用于指定来自客户端请求头的headerbuffer大小。对于大多数请求,1K的缓冲区大小已经足够,如果自定义了消息头或有更大的Cookie,可以增加缓冲区大小。这里设置为32K;

  • large_client_header_buffers用来指定客户端请求中较大的消息头的缓存最大数量和大小, “4”为个数,“128K”为大小,最大缓存量为4个128K;

  • sendfile参数用于开启高效文件传输模式。将tcp_nopushtcp_nodelay两个指令设置为on用于防止网络阻塞;

  • keepalive_timeout设置客户端连接保持活动的超时时间。在超过这个时间之后,服务器会关闭该连接;

  • client_header_timeout设置客户端请求头读取超时时间。如果超过这个时间,客户端还没有发送任何数据,Nginx将返回“Request time out(408)”错误;

  • client_body_timeout设置客户端请求主体读取超时时间。如果超过这个时间,客户端还没有发送任何数据,Nginx将返回“Request time out(408)”错误,默认值是60;

  • send_timeout指定响应客户端的超时时间。这个超时仅限于两个连接活动之间的时间,如果超过这个时间,客户端没有任何活动,Nginx将会关闭连接。

  • gzip是将日志压缩。

    • 使用这一项时需要安装HttpGzip模块,可使用nginx -V命令查看是否已安装

2.3 server虚拟主机配置

建议将对虚拟主机进行配置的内容写进另外一个文件,然后通过include指令包含进来,这样更便于维护和管理。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
server{
listen 80;
server_name blog.foreversfj.com www.foreversfj.com;
root /webWork/Blog/;
server_tokens off;
access_log logs/www.ixdba.net.access.log main;
error_page 404 /404.html;
location = /404.html {
root /webWork/Blog/;
charset gb2312;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
# 表示当访问IP不正确时,返回404
if ($host ~ "\d+\.\d+\.\d+\.\d") {
return 404;
}
}

server标志定义虚拟主机开始;listen用于指定虚拟主机的服务端口;server_name用来指定IP地址或者域名,多个域名之间用空格分 开;index用于设定访问的默认首页地址;root指令用于指定虚拟主机的网页根目录,这个目录可以是相对路径,也可以是绝对路径;Charset用于设置网页的默认编码格式;access_log用来指定此虚拟主机的访问日志存放路径,最后的main用于指定访问日志的输出格式。

2.4 location URL匹配配置

URL地址匹配是进行Nginx配置中最灵活的部分。 location支持正则表达式匹配,也支持条件判断匹配,用户可以通过location指令实现Nginx对动、静态网页进行过滤处理。使用location URL匹配配置还可以实现反向代理,用于实现PHP动态解析或者负载负载均衡。

以下这段设置是通过location指令来对网页URL进行分析处理,所有扩展名以.gif.jpg.jpeg.png!share.bmp.swf结尾的静态文件都交给nginx处理,而expires用来指定静态文件的过期时间,这里是30天。

1
2
3
4
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
root /wwwroot/www.cszhi.com;
expires 30d;
}

以下这段设置是将upload和html下的所有文件都交给nginx来处理,当然,upload和html目录包含在/web/wwwroot/www.cszhi.com目录中。

1
2
3
4
location ~ ^/(upload|html)/ {
root /web/wwwroot/www.cszhi.com;
expires 30d;
}

在最后这段设置中,location是对此虚拟主机下动态网页的过滤处理,也就是将所有以.jsp为后缀的文件都交给本机的8080端口处理。

1
2
3
4
location ~ .*.php$ {
index index.php;
proxy_pass http://localhost:8080;
}