一、下面是nginx的主配置文件:
# 运行用户,可不设置
user www-data;
# nginx进程,可设置为和cpu核数一样
worker_processes auto;
# 更改worker进程的最大打开文件数限制。如果没设置的话,这个值为操作系统的限制。
# worker_rlimit_nofile
# 进程pid存放位置
pid /run/nginx.pid;
# 设置工作模式及Nginx处理链接请求
events {
# 单个后台work process进程的最大并发连接数
worker_connections 768;
# 同时接受多个新网络连接请求的功能。缺省:off
# multi_accept on;
# 优化同一时刻只有一个请求而避免多个睡眠进程被唤醒的设置,on为防止被同时唤醒,默认为off,因此nginx刚安装完以后要进行适当的优化。缺省:on
# accept_mutex on;
# 默认情况下,Nginx会在./configure时找出最适合系统的事件模型。 epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能
# use [kqueue | rtsig | epoll | /dev/poll | select | poll | eventport];
}
# 设定http服务器,利用它的反向代理功能提供负载均衡支持
http {
##
# Basic Settings
##
#启动高效传输文件的模式。sendfile可以让Nginx在传输文件时直接在磁盘和tcp socket之间传输数据。
sendfile on;
# 改变底层TCP栈的行为的指令
# 开启tcp_nopush参数可以允许把http response header和文件的开始放在一个文件里发布。可减少网络报文段的数量。仅在使用sendfile的时候才开启
tcp_nopush on;
# tcp_nodelay on; # 开启此选项,禁用Nagle算法,数据可用时立即发送。tcp_nodelay只在keep-alive才启作用
# 给客户端分配keep-alive链接超时时间。服务器将在这个超时时间过后关闭链接。将它设置低些可以让ngnix持续工作的时间更长。
keepalive_timeout 65;
# types_hash_max_size影响散列表的冲突率。types_hash_max_size越大,就会消耗更多的内存,但散列key的冲突率会降低,检索速度就更快。types_hash_max_size越小,消耗的内存就越小,但散列key的冲突率可能上升。
types_hash_max_size 2048;
# 隐藏ngxin版本号
# server_tokens off;
# 为了提高快速寻找到相应server name的能力,Nginx使用散列表来存储server name。server_names_hash_bucket_size设置了每个散列桶占用的内存大小。
# server_names_hash_bucket_size 64;
# 重定向主机名称的处理
# server_name_in_redirect off;
#设定mime类型,类型由mime.type文件定义。(MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的因特网标准。)
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# SSL Settings
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
#启动加密算法
ssl_prefer_server_ciphers on;
##
# Logging Settings
##
# 设定日志格式及存放路径
access_log /var/log/nginx/access.log;
# 错误日志存放路径
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
#开启gzip压缩功能
gzip on;
# 为指定的客户端禁用gzip功能。设置成IE6或者更低版本以使方案能够广泛兼容。
gzip_disable "msie6";
#vary header支持。该选项可以让前端的缓存服务器缓存经过GZIP压缩的页面,例如用Squid缓存经过Nginx压缩的数据。
# gzip_vary on;
# 允许或者禁止压缩基于请求和响应的响应流。设置为any,意味着将会压缩所有的请求。
# gzip_proxied any;
# 设置数据的压缩等级。这个等级可以是1-9之间的任意数值,9是最慢但是压缩比最大的。
# gzip_comp_level 6;
# 压缩缓冲区大小。表示申请16个单位为8K的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果。
# gzip_buffers 16 8k;
# 压缩版本(默认1.1,前端为squid2.5时使用1.0)用于设置识别HTTP协议版本,默认是1.1,目前大部分浏览器已经支持GZIP解压,使用默认即可。
# gzip_http_version 1.1;
# 用来指定压缩的类型,“text/html”类型总是会被压缩
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
##
# Virtual Host Configs
##
# 在当前文件中包含另一个文件内容的指令
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
# 邮件代理服务器
#mail {
# # See sample authentication script at:
# # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
# # 邮件认证服务器的访问URL
# # auth_http localhost/auth.php;
# POP3协议,通常都是监听110端口。
# # pop3_capabilities "TOP" "USER";
# IMAP协议,通常都是监听143端口
# # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
# server {
# listen localhost:110;
# protocol pop3;
# proxy on;
# }
#
# server {
# listen localhost:143;
# protocol imap;
# proxy on;
# }
#}
补充:自定义日志文件格式
# 主配置文件中
log_format json_format '{"@timestamp":"$time_iso8601",'
'"host":"$server_addr",'
'"clientip":"$remote_addr",'
'"size":$body_bytes_sent,'
'"responsetime":$request_time,'
'"upstreamtime":"$upstream_response_time",'
'"upstreamhost":"$upstream_addr",'
'"http_host":"$host",'
'"url":"$uri",'
'"domain":"$host",'
'"xff":"$http_x_forwarded_for",'
'"referer":"$http_referer",'
'"agent":"$http_user_agent",'
'"status":"$status"}';
# .conf文件
server {
listen 80;
server_name samsung.chinacloudapp.cn;
access_log /etc/nginx/access.log json_format;
location / {
root html;
index index1.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
# access_log /etc/nginx/access.log json_format; # 定义日志路径为/etc/nginx/access.log,并引用在主配置文件nginx.conf中定义的json日志格式
二、server部分主要配置
1、基于域名和IP的虚拟主机
server_name localhost www.baidu.com; #多个域名用空格间隔即可
2、location 模块正则匹配配置:
在没有使用正则表达式的时候,nginx会先在server中的多个location选取匹配度最高的一个uri,uri是用户请求的字符串,即域名后面的web文件路径,然后使用该location模块中的正则url和字符串,如果匹配成功就结束搜索,并使用此location处理此请求。
= # 用于标准uri前,需要请求字串与uri完全匹配,如果匹配成功就停止向下匹配并立即处理请求。
~ # 区分大小写
~* # 不区分大写
!~ # 区分大小写不匹配
!~* # 不区分大小写不匹配
^ # 匹配以什么开头
$ # 匹配以什么结尾
\ # 转义字符。可以转 . * ? 等
* # 代表任意长度的任意字符-f和!-f # 用来判断是否存在文件
-d和!-d # 用来判断是否存在目录
-e和!-e # 用来判断是否存在文件或目录
-x和!-x # 用来判断文件是否可执行
3、常见http状态码:
200 # 请求成功,即服务器返回成功
301 # 永久重定向
302 # 临时重定向
403 # 禁止访问,一般是服务器权限拒绝
400 # 错误请求,请求中有语法问题,或不能满足请求。
403 # 服务器权限问题导致无法显示
404 # 服务器找不到用户请求的页面
500 # 服务器内部错误,大部分是服务器的设置或内部程序出现问题
501 # 没有将正在访问的网站设置为浏览器所请求的内容
502 # 网关问题,是代理服务器请求后端服务器时,后端服务器不可用或没有完成 相应网关服务器,这通常是反向代理服务器下面的节点出问题导致的。
503 # 服务当前不可用,可能是服务器超载或停机导致的,或者是反向代理服务器后面没有可以提供服务的节点。
504 # 网关超时,一般是网关代理服务器请求后端服务器时,后端服务器没有在指定的时间内完成处理请求,多数是服务器过载导致没有在特定的时间内返回数据给前端代理服务器。
505 # 该网站不支持浏览器用于请求网页的HTTP协议版本(最为常见的是HTTP/1.1)