配置文件nginx.conf

nginx服务器的主配置文件nginx.conf中,包括全局配置、IO事件配置、HTTP配置这三大块内容

1.由各种配置语句组成,不使用特定的界定标记。全局配置部分包括Nginx服务的运行用户、工作进程数、错误日志、PID存放位置等基本设置。


在做的时候最好先把配置文件备份一下,有备无患嘛,嘻嘻......


[root@68Q ~]# vi /usr/local/nginx/conf/nginx.conf

下面这段内容是对Nginx的全局属性配置,代码如下:

#usernobody;

worker_processes4;


#error_loglogs/error.log;

error_loglogs/error.lognotice;

#error_loglogs/error.loginfo;


pidlogs/nginx.pid;


worker_rlimit_nofile65535;

events {

use epoll;

worker_connections65535;

}
上面这段代码中每个配置选项的含义解释如下:

user是个主模块指令,指定Nginx Worker进程运行用户以及用户组,默认由nobody账号运行。

worker_processes是个主模块指令,指定了Nginx要开启的进程数。每个Nginx进程平均耗费1OMB12MB内存。根据经验,一般指定一个进程足够了,如果是多核CPU,建议指定和CPU的数量一样多的进程数即可。

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

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

worker_rlimit_nofile用于绑定worker进程和CPULinux内核2.4以上可用。

events指令用来设定Nginx的工作模式及连接数上限。

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

worker_connections也是个事件模块指令,用于定义Nginx每个进程的最大连接数,默认是1024。最大客户端连接数由 worker_processesworker_connections决定,即 max_client=worker_processes*worker_connections,在作为反向代理时变为:max_clients=worker_processes*worker_connections/4

进程的最大连接数受Linux系统进程的最大打开文件数限制,在执行操作系统命令“ulimit -n 65536"worker_connections的设置才能生效。

2HTTP服务器配置接下来开始对HTTP服务器进行配置。下面这段内容是NginxHTTP服务器相关属性的配置,代码如下:



http {

includemime.types;

default_typeapplication/octet-stream;


log_formatmain'$remote_addr - $remote_user[$time_local] "$request" '

'$status $body_bytes_sent"$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for"';


access_loglogs/access.logmain;


sendfileon;

tcp_nopushon;

tcp_nodelayon;


#keepalive_timeout0;

keepalive_timeout65;

client_header_timeout 10;


client_body_timeout 10;


send_timeout 10;


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

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

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

下面的代码实现对日志格式的设定。

log_format main  '$remote_addr - $remote_user  [$time_local] '

' "$request"  $status $bytes_sent  '

' "$http_referer"  "$http_user_agent"  '

' "$gzip_ratio "';

log_format download  '$remote_addr - $remote_user [$time_local] '

' "$request   $status $bytes_sent  '

' " $http_referer"   "$http_user_agent"   '

'  $http_range"  "$sent http_content_range" ' ;

log_formatNginxHttpLog模块指令,用于指定Nginx日志的输出格式。main为此日志输出格式的名称,可以在下面的access_log指令中引用。

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

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

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

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

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

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

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

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



3.这一步都没做,以了解为主,但绝不会影响启动的,然后就是,NginxHttpGzip模块。这个模块支持在线实时压缩输出数据流。反正我是没装,具体安不安这个要看需不需要了,但我把这个也写上,要查看是否安装了此模块,需要使用下面的命令:

[root@localhost conf] # /opt/nginx/sbin/nginx -V

nginx  version: nginx/0.7.65

configure  arguments: -with-http_stub_status_module--with-http_gzip_static_module

-- prefix=/opt/nginx

通过/opt/nginx/sbin/nginx -V命令可以查看安装Nginx时的编译选项。由输出可知,我们已经安装了HttpGzip模块。

下面是HttpGzip模块在Nginx配置中的相关属性设置:

gzip on

gzip_min_length  1k;

gzip_buffers    4    16k;

gzip_http_version  l.1;

gzip_comp_level  2

gzip_types  text/plain application/x-javascript text/css application/xml;

gzip_vary  on;

gzip用于设置开启或者关闭gzip模块,“gzip on”表示开启gzip压缩,实时压缩输出数据流。

gzip_min_length用于设置允许压缩的页面最小字节数,页面字节数从header头的Content-Length中获取。默认值是O,不管页面多大都进行压缩。建议设置成大于1K的字节数中华抑郁健康网,小于1K可能会越压越大。

gzip_buffers表示申请4个单位为16K的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果。

gzip_http_version用于设置识别HTTP协议版本,默认是1.1,目前大部分浏览器已经支持gzip解压,使用默认即可。

gzip_comp_level用来指定gzip压缩比,1压缩比最小,处理速度最快:9压缩比最大,传输速度快,但处理最慢,也比较消耗CPU资源。

gzip_types用来指定压缩的类型,无论是否指定,“text/html"类型总是会被压缩的。

gzlp_vary选项可以让前端的缓存服务器缓存经过gzip压缩的页面,例如,用Squid缓存经过Nginx压缩的数据。


#FastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度。下面参数看字面意思都能理解。
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;

不过,第三块这我都没做......

4. server虚拟主机配置

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

server {

listen80;

server_name192.168.2.1 www.benet.com;


#charset utf-8;


#access_loglogs/host.access.logmain;


location / {

roothtml;

indexindex.html index.php;

}


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

access_log  logs/www.ithov.com.access.log main;

access_log用来指定此虚拟主机的访问日志存放路径。最后的main用于指定访问日志的输出格式。6URL匹配配置 URL地垃匹配是Nginx配置中最灵活的部分。location支持正则表达式匹配,也支持条件判断匹配,用户可以通过location指令实现 Nginx对动、静态网页的过滤处理。以下这段设置是通过location指令来对网页



5.在最后这段设置中,设置了虚拟主机的错误信息返回页面,通过error_page指令可以定制各种错误信息的返回页面,在默认情况下,Nginx会在主目录的html目录中查找指定的返回页面。特别需要注意的是,这些错误信息的返回页面大小一定要超过512KB,否则会被IE浏览器替换为IE默认的错误页面。


#

error_page404/404.html;

error_page500 502 503 504/50x.html;

location = /50x.html {

roothtml;

}


上述配置中,listen语句允许同时限定ip地址,采用“IP地址:端口”形式。

这是一个模板,下面就详细的再配置基于域名的web




6.基于域名的虚拟Web主机

使用Nginx搭建虚拟机服务器时,每个虚拟Web站点拥有独立的“server { }”配置段,各自监听的IP地址、端口号可以单独指定,当然网站名称也是不同的。

(1)准备网站目录及测试文件

[root@68Q~]# mkdir -p /var/www/benet

[root@68Q ~]# echo"<h1>www.benet.com</h1>" > /var/www/benet/index.html


(2)调整nginx.conf 配置文件


server {

listen80;

server_name 192.168.2.1 www.benet.com;


#charset utf-8;


access_log  logs/benet.access.logmain;


location / {

roothtml;

indexindex.html index.php;

}

注意:如果是两个域名,那一定要建两个“server { }”,模式都一样,但是要把;写上,还有就是不要多一个{}或少一个{},这个配置文件有一点错都会导致nginx起不来,所以一定要仔细

(3)重启nginx

[root@68Q~]# service nginx restart

nginx:the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

nginx: configurationfile /usr/local/nginx/conf/nginx.conf test is successful

stopnginx[ok]

startnginx[ok]

最后访问

[root@68Q~]# elinks http://www.benet.com

http://www.benet.com/

www.benet.com

ok



如果访问不了,那就是iptablesselinux的问题了。