nginx 配置
1、#useradd -M -s /sbin/nologin nginx (nginx默认以nobody身份运行,建议为其创建专门的用户账号,以便更准确的控制其访问,增加灵活性,降低安全风险
#tar zxvf nginx-1.0.8.tar.gz -C /usr/src
#cd /usr/src/nginx-1.0.8
#./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module (启用状态统计模块
#make && make install
#ln -s /usr/local/nginx/sbin/nginx /usr/localsbin (为使nginx主程序运行更加方便,创建链接文件,即可直接用nginx执行
#nginx -t (对配置文件/usr/local/nginx/conf/nginx.conf进行检查,找出不当或错误的配置,另可用-c指定其它位置的配置文件
#nginx (使用默认配置文件开启nginx
#nginx -c 配置文件 (改用其它的配置文件开启nginx
#killall -9 nginx (停止nginx
#kill -9 $(cat /usr/local/nginx/logs/nginx.pid(停止nginx
2、配置文件:/usr/local/nginx/conf/nginx.conf包括:全局配置、I/O事件配置、http配置三大块,配置语句的格式:“关键字值;”末尾以分号表示结束。
》全局配置:无特定界定标记,包括运行用户、工作进程数、错误日志、PID存放位置
#user nobody; (运行用户默认为nobody
worker_process 2; (指定nginx启动的工作进程数量,按cpu数目来指定,一般为它的倍数
worker_cpu_affinity 00000001 00000010; (为每个进程分配cpu,此例是将2个进程分配到2个cpu,可写多个或将一个进程分配到多个cpu
worker_rlimit_nofile 1024; (一个nginx进程打开的最多文件数目,理论值应是最多打开文件数(#ulimit -n)与nginx进程数相除,但nginx分配请求并不是那么均匀,所以最好与(ulimit -n)值保持一致
error_log logs/error_log; (全局错误日志文件位置
pid logs/nginx.pid
》I/O事件配置:使用events{ }界定标记,用来指定nginx进程的I/O响应模型,每个进程的连接数等设定
events {
use epoolj; (使用epool模型,2.6以上内核使用此模型以提高性能
worker_connections 4096; (每个进程允许的最多连接数,默认1024,此项根据实际需要定,一般在10000以下,理论上每台nginx服务器最大连接数为worker_process*worker_connections,具体还看硬件及带宽等
}
》HTTP配置:使用http{ }界定标记,包括访问日志、HTTP端口、网页目录、默认字符集、连接保持、虚拟主机、php解析等
http {
include mime.types; (设定mime类型/usr/local/nginx/conf/mime.types
default_type application/octet-stream;
#log_format main…… (设定日志格式
#access_log logs/access.log main; (访问日志位置
sendfile on; (支持文件下载
#tcp_nopush on;
#keepalive_timeout 65; (链接保持超时
#gzip on;
server { (web服务的监听配置-虚拟主机
listen 80;
server_name localhost; (FQDN,多个用空格分开,网站名称
#charset koi8-r; (网页的默认字符集,有gb2312,utf-8等
#access_log logs/host.access.log main;
location / {
root html; (网页根目录位置/usr/local/nginx/html/,可修改/var/www/html
index index.html index.htm; (默认首页
}
#error_page 404 /404.html;
……
error_page 500 502 503 504 150x.html; (内部错误的反馈页面
location = /50x.html {
root html;
}
}
}
》状态统计:在server区域内
location /tongji {
stub_status on; (内置模块http_stub_status_module反馈当前的WEB访问情况
access_log off;
auth_basic "nginx status"; (登录提示
auth_basic_user_file /usr/local/nginx/.htpasswd;
allow 192.168.0.12;
deny 192.168.0.0/24; (acl客户端地址访问控制
}
注:nginx支持为目录添加密码认证,使用apache的htpasswd来创建密码文件
#htpasswd -c /usr/local/nginx/.htpasswd zhangsan
#nginx -t
#service nginx restart
在浏览器端http://IP/tongji 结果如下:
Active connections (当前的活动连接数
Server accepts handled request (已处理的请求数
Reading:? Writing:? waiting:? (已处理的连接数;成功的TCP握手次数;已处理的请求数
》虚拟主机:每个虚拟WEB站点拥有独立的server{ }段,各自监听的IP,端口号可以单独指定,网络名称要不同
#mkdir -p /var/www/{benet,accp}
#echo "www.benet.com" >> /var/www/benet/index.html
#echo "www.accp.com" >> var/www/accp/index.html
#vi /usr/local/nginx/conf/nginx.conf
打开log_format main……
server {
listen 80;
server_name www.benet.com benet.com;
charset utf-8;
access_log logs/benet.access.log main;
location {
root /var/www/benet;
index index.html index.php;
}
}
server {
listen 80;
server_name www.accp.com accp.com;
charset utf-8;
access_log logs/accp.access.log main;
location {
root /var/www/accp;
index index.html index.php;
}
}
》nginx的location
基本语法:location =|~|~*|!~|!~*|^~ /usi/{……}
= 表示精确匹配
~ 区分大小写匹配
~* 不区分大小写匹配
!~ 区分大小写不匹配
!~* 不区分大小写不匹配
^~ 正则表达式匹配
文件及目录匹配:
-f和!-f 用来判断是否存在文件
-d和!-d 用来判断是否存在目录
-e和!-e 是否存在文件或目录
-x和!-x 文件是否可执行
例: location = / {
只匹配/查询
}
例:location / {
匹配任何查询,因为所有请求都已/开头,但是正则表达式和长的块规则将被优先查询匹配
}
例:location ^~ /images/ {
匹配任何以/images/开头的任何查询并且停止搜索,任何正则表达式将不会被测试
}
例:location ^* \.(gif\jpg\jpeg)$ {
匹配任何以gif、jpg、jpeg结尾的请求
}