(一)nginx.conf模块
1、全局块
2、events块
3、http块
(二)全局参数详解
user nobody;
#Nginx worker进程运行的用户及用户组,默认:user nobody nobody
worker_processes 1;
#Nginx worker进程个数:其数量直接影响性能。
ssl_engine device;
#ssl硬件加速。用户可以用OpneSSL提供的命令来查看是否有ssl硬件加速设备:openssl engine -t
error_log logs/error.log;
error_log logs/error.log notice;
error_log logs/error.log info;
#error日志的设置,leve的取值范围是debug、info、notice、warn、error、crit、alert、emerg从左至右级别依次增大。当level的级别为error时,error、crit、alert、emerg级别的日志就都会输出。大于等于该级别会输出,小于该级别的不会输出。
pid logs/nginx.pid;
#pid文件(master进程ID的pid文件存放路径)的路径
(三)events参数详解
use epoll:
#使用epoll的I/O 模型(值得注意的是如果你不知道Nginx该使用哪种轮询方法的话,它会选择一个最适合你操作系统的)
补充说明:与apache相类,nginx针对不同的操作系统,有不同的事件模型
A)标准事件模型
Select、poll属于标准事件模型,如果当前系统不存在更有效的方法,nginx会选择select或poll
B)高效事件模型
Kqueue:
使用于FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 和 MacOS X.使用双处理器的MacOS X系统使用kqueue可能会造成内核崩溃。
Epoll:
使用于Linux内核2.6版本及以后的系统。
/dev/poll:
使用于Solaris 7 11/99+, HP/UX 11.22+ (eventport), IRIX 6.5.15+ 和 Tru64 UNIX 5.1A+。
Eventport:
使用于Solaris 10. 为了防止出现内核崩溃的问题, 有必要安装安全补丁,查看linux版本号可以使用 cat /proc/version命令
accept_mutex on;
#设置网路连接序列化,防止惊群现象发生,默认为on
multi_accept on;
#设置一个进程是否同时接受多个网络连接,默认为off
worker_connections 1024;
# 最大连接数
client_header_buffer_size 4k;
#客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求头的大小不会超过1k,不过由于一般系统分页都要大于1k,所以这里设置为系统分页大小。查看系统分页可以使用 getconf PAGESIZE命令;
open_file_cache max=2000 inactive=60s
#为打开文件指定缓存,默认是没有启用的,max指定缓存最大数量,建议和打开文件数一致,inactive是指经过多长时间文件没被请求后删除缓存 打开文件最大数量为我们再main配置的worker_rlimit_nofile参数。
open_file_cache_valid 60s
#这个是指多长时间检查一次缓存的有效信息。如果有一个文件在inactive时间内一次没被使用,它将被移除。
open_file_cache_min_uses 1
#open_file_cache指令中的inactive参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如果有一个文件在inactive时间内一次没被使用,它将被移除。
(四)http参数详解
include mime.types;
#导入支持的文件类型
default_type application/octet-stream;
#设置默认的类型,会提示下载不匹配的类型文件
sendfile on;
#实现文件零拷贝
tcp_nopush on;
#在开启了sendfile的情况下,合并请求后统一发送给客户端。
tcp_nodelay off;
#在开启了keepalived模式下的连接是否启用TCP_NODELAY选项,当为off的时候,延迟0.2发送,默认为on,不延迟发送,立即发送用户相应的报文。
keepalive_timeout 65 65;
#设置会话保持时间
gzip on;
#开启文件压缩
gzip_min_length 1k;
#允许压缩的页面的最小字节数,页面字节数从header偷得content-length中获取.默认是0,不管页面多大都进行压缩.建议设置成大于1k的字节数,小于1k可能会越压越大
server_names_hash_bucket_size 128;
#服务器名字的hash表大小
large_client_header_buffers 4 64k;
#设定请求缓
client_max_body_size 8m;
#设定请求缓
server
#server块里的任意配置都是基于http块里的已有配置的
listen 80;
#设置监听的地址和端口
listen 443 ssl;
# 监听端口 HTTPS
server_name localhost
# 域名可以有多个,用空格隔开,并支持正则表达式,如*.magedu.com www.magedu.* www.(site\d+).magedu.com$ default_server
rewrite ^(.*) https://$server_name$1 permanent;
# HTTP 自动跳转 HTTPS
charset utf-8
#设置编码格式
access_log /var/log/nginx/access.log access;
# 定义本虚拟主机的访问日志
ssl_certificate C:\WebServer\Certs\certificate.crt;
#配置包含包含的数字证书
ssl_certificate_key C:\WebServer\Certs\private.key;
#配置加密和保护信息安全的关键字符串
ssl_session_cache shared:SSL:1m;
# 1MB 缓存(约 400 个会话)
ssl_session_timeout 5m;
# 延长会话复用时间,减少握手开销
ssl_protocols SSLv2 SSLv3 TLSv1;
#启用指定协议版本。
备注:SSLv2/SSLv3已被证实存在严重漏洞(如POODLE攻击),TLSv1也已过时,替换为仅允许安全协议:ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
#定义加密套件优先级顺序:
!ADH:禁用匿名Diffie-Hellman(无证书验证,易中间人攻击)。
!EXPORT56:排除56位弱加密算法。
RC4+RSA:包含已被破解的RC4算法(不安全)。
+HIGH:+MEDIUM:+LOW:按强度分级启用密码。
+SSLv2:+EXP:启用已废弃的SSLv2相关算法和导出级弱密码。
备注:包含RC4、SSLv2套件等不安全算法。替换为现代安全套件 ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256";
ssl_prefer_server_ciphers on;
#服务端优先选择加密套件。避免客户端弱算法偏好影响安全,增强可控性
location /oauth/{
proxy_pass https://localhost:13580/oauth/;
proxy_set_header HOST $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
#配置地址拦截转发,解决跨域验证问题
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
expires 10d;
}
#图片缓存时间设置
location ~ .*\.(js|css)?$ {
expires 1h;
}
#JS和CSS缓存时间设置
upstream webhost {
server 192.168.0.5:6666 weight=2;
server 192.168.0.7:6666 weight=3;
}
#upstream的负载均衡,weight(权重).可以根据机器配置定义权重.权重越高被分配到的几率越大
upstream webhost {
ip_hash;
server 192.168.0.5:6666 ;
server 192.168.0.7:6666 ;
}
#upstream的负载均衡,ip_hash分配方式,每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的session共享问题
#下方是upstream负载均衡例子,注意proxy_pass参数设置
server{
listen 80;
server_name mongo.demo.com;
#对 "/" 启用反向代理
location / {
proxy_pass http://webhost;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#这些是一些反向代理的配置,可选 begin
proxy_set_header Host $host;
client_max_body_size 10m; #允许客户端请求的最大单文件字节数
client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数,
proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)
proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)
proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的设置
proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k;#设定缓存文件夹大小,大于这个值,将从upstream服务器传
#这些是一些反向代理的配置,可选 end
}
}