1、
#使用哪个用户启动nginx 前面是用户,后面是组
#user nobody;
2、
#nginx工作的进程数量(即worker进程数的个数),一般设置为和cpu核数一样
worker_processes auto;
3、
#[ debug | info | notice | warn | error | crit ]错误日志的位置
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
4、
#进程号(pid)保存文件
#pid logs/nginx.pid;
5、
events
{
worker_connections 51200; #每个进程最大连接数(最大连接=连接数x进程数)
}
6、
http {
include mime.types; #文件扩展名与文件类型映射表
default_type application/octet-stream; #默认文件类型
#日志文件格式
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main; 用了log_format指令设置了日志格式之后,需要用access_log指令指定日志文件的存放路径;
#开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。
sendfile on;
#该参数在sendfile开启的状态下才能生效。激活tcp_nopush参数可以允许把httpresponse header和文件的开始放在一个文件里发布,积极的作用是减少网络报文段的数量。以防止网络阻塞
#tcp_nopush on;
#该参数在sendfile开启的状态下才能生效。激活tcp_nodelay,内核会等待将更多的字节组成一个数据包,从而提高I/O性能。以防止网络阻塞
#tcp_nodelay on;
#连接超时时间,单位是秒。如果是65,则表示:如果65秒内没有操作则断开连接。
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on; #开启gzip压缩功能
下面具体解释下日志文件格式:
$remote_addr与$http_x_forwarded_for用以记录客户端的ip地址;
$remote_user:用来记录客户端用户名称;
$time_local: 用来记录访问时间与时区;
$request: 用来记录请求的url与http协议;
$status: 用来记录请求状态;成功是200,
$body_bytes_sent :记录发送给客户端文件主体内容大小;
$http_referer:用来记录从那个页面链接访问过来的;
$http_user_agent:记录客户浏览器的相关信息;
通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址是反向代理服务器的iP地址。
反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。
7、 #下面开始虚拟主机的配置:
server {
listen 80; #监听端口
server_name localhost; #配置访问域名,域名可以有多个,用空格隔开
#charset koi8-r; #默认编码
#access_log logs/host.access.log main; #设定本虚拟主机的访问日志
location / { #该location模块表示:当访问http://localhost:80时访问/usr/local/nginx/html/index.html文件
root html; #此处可以使用相对路径也可以使用绝对路径,相对路径是相对于/usr/local/nginx/下面为相对路径,而绝对路径是从/usr/...为绝对路径
index index.html index.htm; #每当访问一个文件夹,先找index.html,找不到就找index.htm 找不到就不找了。不执行文件。
}
#error_page 404 /404.html; #404错误页面。把404.html放到html下
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html; #500,502,503,5604错误页面。把50x.html放到html下
location = /50x.html {
root html; #此处可以使用相对路径也可以使用绝对路径,相对路径是相对于/usr/local/nginx/下面为相对路径,而绝对路径是从/usr/...为绝对路径
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ { #该location模块表示:当访问以.php结尾的页面时,比如http://localhost/index.php,则被代理到http://127.0.0.1/index.php
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ { #该localhost模块表示:当访问以.php结尾的页面时,请求调度到fcgi server
# root html; #此处可以使用相对路径也可以使用绝对路径,相对路径是相对于/usr/local/nginx/下面为相对路径,而绝对路径是从/usr/...为绝对路径
# fastcgi_pass 127.0.0.1:9000; #抛给本机的9000端口
# fastcgi_index index.php; #设定动态首页
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; #脚本文件请求的路径
# include fastcgi_params; #配置项目中:include fastcgi_params; fastcgi_params 文件中含有各个nginx常量的定义,默认情况 SCRIPT_FILENAME = $fastcgi_script_name
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht { #该location模块表示:禁止访问 .htxxx 文件
# deny all;
#}
}
8、下面进行另外一个虚拟主机的配置:另一个虚拟主机使用混合的IP的配置
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html; #此处可以使用相对路径也可以使用绝对路径,相对路径是相对于/usr/local/nginx/下面为相对路径,而绝对路径是从/usr/...为绝对路径
# index index.html index.htm; #每当访问一个文件夹,先找index.html,找不到就找index.htm 找不到就不找了。不执行文件。
# }
#}
9、下面进行https的配置
# HTTPS server
#
#server {
# listen 443 ssl; #监听端口
# server_name localhost; #配置访问域名,域名可以有多个,用空格隔开
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / { #该location模块表示:当访问http://localhost:80时访问/usr/local/nginx/html/index.html文件
# root html; #此处可以使用相对路径也可以使用绝对路径,相对路径是相对于/usr/local/nginx/下面为相对路径,而绝对路径是从/usr/...为绝对路径
# index index.html index.htm; #每当访问一个文件夹,先找index.html,找不到就找index.htm 找不到就不找了。不执行文件。
# }
#}
}
下面对https设置中的参数进行解释:
1、
ssl_certificate
证书其实是个公钥,它会被发送到连接服务器的每个客户端。2、
ssl_certificate_key
私钥是用来解密的,所以它的权限要得到保护但nginx的主进程能够读取。3、
sl_session_cache shared:SSL:1m
:设置ssl/tls会话缓存的类型和大小。
- shared
所有工作进程之间共享缓存。缓存大小以字节为单位指定;一兆字节可以存储大约4000个session。每个共享缓存都应该有一个任意名称。具有相同名称的缓存可以用于多个虚拟服务器。
- off
严禁使用session缓存:nginx明确告诉客户端session可能不会被重用。
- none
session缓存的使用被禁止:nginx告诉客户端session可能会被重用,但实际上并不会将session参数存储在缓存中。
- builtin
在OpenSSL中构建的缓存;仅由一个工作进程使用。缓存大小在session中指定。如果没有给出大小,则等于20480个会话。使用内置高速缓存可能导致内存碎片。
- 注意: builtin和shared可以同时使用,但是Nginx官方说只使用shared缓存,而不使用built-in缓存的性能应该会更高。配置案例:
ssl_session_cache builtin:1000 shared:SSL:10m;
4、
ssl_session_timeout
5m
: 客户端可以重用会话缓存中ssl参数的过期时间,内网系统默认5分钟太短了,可以设成30m
即30分钟甚至4h
。5、设置较长的
keepalive_timeout
也可以减少请求ssl会话协商的开销,但同时得考虑线程的并发数了
6、ssl_ciphers
选择加密套件,不同的浏览器所支持的套件(和顺序)可能会不同。这里指定的是OpenSSL库能够识别的写法,你可以通过openssl -v cipher 'RC4:HIGH:!aNULL:!MD5'
(后面是你所指定的套件加密算法) 来看所支持算法。加密套件 之间用冒号分隔,加密套件 前有感叹号的表示必须废弃。
7、ssl_prefer_server_ciphers on
设置协商加密算法时,优先使用我们服务端的加密套件,而不是客户端浏览器的加密套件。