1.基本结构
worker_process 4; events{ worker_connections 1024; }; http{ server{ } server{ } }
2.相关命令
查看nginx进程
tasklist /fi "imagename eq nginx.exe" 显示如下图:
nginx常用命令(一定要进入nginx的安装目录才能执行)
nginx -s stop 强制关闭
nginx -s quit 安全关闭
nginx -s reload 改变配置文件的时候,重启nginx工作进程,来时配置文件生效
nginx -s reopen 打开日志文件
3.配置详解
**设置 用户和用户组 **
user www www;//nobody低权限用户 安全
**nginx进程数,建议设置为等于CPU总核心数或者两倍 **
worker_process 4
**设置错误日志的存放文件,全局错误日志定义类型,[ debug | info | notice | warn | error | crit ] **
error_log /usr/local/nginx/logs/error.log info;
**进程pid文件的存放路径(pid是控制系统的重要文件) **
pid /usr/local/nginx/logs/nginx.pid;
指定进程可以打开的最大描述符:数目
工作模式与连接数上限
这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n 的值保持一致。
现在在linux 2.6内核下开启文件打开数为65535,worker_rlimit_nofile就相应应该填写65535。
这是因为nginx调度时分配请求到进程并不是那么的均衡,所以假如填写10240,总并发量达到3-4万时就有进程可能超过10240了,这时会返回502错误。
worker_rlimit_nofile 65535;
**设置最大连接数 **
events{ worker_connections 1024; };
http指令处理http请求
# http {
# mime type映射
include mime.types;
default_type application/octet-stream;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
# server 表示一个虚拟主机,一台服务器可配置多个虚拟主机
server {
# 监听端口
listen 80;
# 识别的域名
server_name localhost;
# 一个关键设置,与url参数乱码问题有关
charset utf-8;
#access_log logs/host.access.log main;
#location表达式:
#syntax: location [=|~|~*|^~|@] /uri/ { … }
#分为两种匹配模式,普通字符串匹配,正则匹配
#无开头引导字符或以=开头表示普通字符串匹配
#以~或~* 开头表示正则匹配,~*表示不区分大小写
#多个location时匹配规则
#总体是先普通后正则原则,只识别URI部分,例如请求为/test/1/abc.do?arg=xxx
#1. 先查找是否有=开头的精确匹配,即location = /test/1/abc.do {...}
#2. 再查找普通匹配,以 最大前缀 为规则,如有以下两个location
# location /test/ {...}
# location /test/1/ {...}
# 则匹配后一项
#3. 匹配到一个普通格式后,搜索并未结束,而是暂存当前结果,并继续再搜索正则模式
#4. 在所有正则模式location中找到第一个匹配项后,以此匹配项为最终结果
# 所以正则匹配项匹配规则受定义前后顺序影响,但普通匹配不会
#5. 如果未找到正则匹配项,则以3中缓存的结果为最终结果
#6. 如果一个匹配都没有,返回404
#location =/ {...} 与 location / {...} 的差别
#前一个是精确匹配,只响应/请求,所有/xxx类请求不会以前缀匹配形式匹配到它
#而后一个正相反,所有请求必然都是以/开头,所以没有其它匹配结果时一定会执行到它
#location ^~ / {...} ^~意思是非正则,表示匹配到此模式后不再继续正则搜索
#所有如果这样配置,相当于关闭了正则匹配功能
#因为一个请求在普通匹配规则下没得到其它普通匹配结果时,最终匹配到这里
#而这个^~指令又相当于不允许正则,相当于匹配到此为止
location / {
root html;
index index.html index.htm;
# deny all; 拒绝请求,返回403
# allow all; 允许请求
}
location /test/ {
deny all;
}
location ~ /test/.+\.jsp$ {
proxy_pass http://192.168.1.62:8080;
}
location ~ \.jsp$ {
proxy_pass http://192.168.1.61:8080;
}
# 定义各类错误页
error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# @类似于变量定义
# error_page 403 http://www.jikexueyuan.com这种定义不允许,所以利用@实现
error_page 403 @page403;
location @page403 {
proxy_pass http://http://www.jikexueyuan.com;
}
}
4.Nginx虚拟主机的配置
为了使一个服务器可以供更多的用户使用,可以将服务器氛围多个虚拟的自服务器,每个子服务器都是独立的,这些服务器是根据虚拟化技术分出来的,这样一台服务器就可以虚拟成很多台子服务器,我们把子服务器叫做虚拟主机
第一种:基于域名的虚拟主机,通过域名来区分虚拟主机——应用:外部网站
1.需要建立/data/www /data/bbs目录,windows本地hosts添加虚拟机ip地址对应的域名解析;对应域名网站目录下新增index.html文件; 127.0.0.1 www.mingyipc.com 127.0.0.1 www.mingyiwap.com 2.nginx.conf配置文件新增 server{ listen:80;//监听端口号 server_name: www.mingyiipc.com;//虚拟主机名称 accsess_log logs/mingyipc.log combined;//日志文件,默认格式 必须 location / 虚拟主机本机根目录 { index index.html index.htm;//默认首页 root html/mingyipc.html;//绑定的目录(安装nginx的目录) } } server{ listen:80;//监听端口号 server_name: www.mingyiwap.com;//虚拟主机名称 accsess_log logs/mingyipc.log combined;//日志文件,默认格式 必须 location / 虚拟主机本机根目录 { index index.html index.htm;//默认首页 root html/mingyiwap.html;//绑定的目录(安装nginx的目录) } } 访问: www.mingyiipc.com www.mingyiwap.com
第二种:基于端口的虚拟主机,通过端口来区分虚拟主机——应用:公司内部网站,外部网站的管理后台
nginx.conf配置文件新增 server{ listen:8000;//监听端口号 server_name: www.mingyi.com;//虚拟主机名称 accsess_log logs/mingyi.log combined;//日志文件,默认格式 必须 location / 虚拟主机本机根目录 { index index.html index.htm;//默认首页 root html/mingyipc.html;//绑定的目录(安装nginx的目录) } } server{ listen:8001;//监听端口号 server_name: www.mingyi.com;//虚拟主机名称 accsess_log logs/mingyi.log combined;//日志文件,默认格式 必须 location / 虚拟主机本机根目录 { index index.html index.htm;//默认首页 root html/mingyi.html;//绑定的目录(安装nginx的目录) } } 访问: www.mingyi.com:8000 www.mingyi.com:8001
第三种:基于ip的虚拟主机,几乎不用
1.配置多个ip ifconfig eth0 192.168.1.0 netmask 255.255.255.0 ifconfig eth0:1 192.168.1.7 broadcast 19.168.1.255 netmask 255.255.255.0 2.配置nginx server{ listen:192.168.1.7:80;//监听IP地址 server_name:192.168.1.7;//虚拟主机名称 accsess_log logs/mingyipc.log combined;//日志文件,默认格式 必须 location / 虚拟主机本机根目录 { index index.html index.htm;//默认首页 root html/mingyipc.html;//绑定的目录(安装nginx的目录) } }