# 也许没有列出所有配置的nginx配置文件demo
# 本demo中的基础配置示例多为默认配置
#
#
#
# 是否以守护进程运行
daemon on;
# 是否以master/worker方式工作
master_process on;
# Nginx worker进程个数
# master/worker运行模式下,worker的个数
# 其最优值取决于很多因素,一般会将其设定为CPU内核数量,或者设置为“auto”让其自动检测
worker_processes 1;
# 日志的配置格式为:error_log path/file level;
# 日志按等级从小到大:debug、info、notice、warn、error、crit、alert、emerg
# 设定日志级别后,小于该等级的日志将不会输出
# 如果需要debug级别的日志,无论如何都需要确保在configure时已经加入了--with-debug参数,否则不会生效
# 关闭日志的方法是:error_log /dev/null;
error_log logs/error.log;
error_log logs/error.log notice;
error_log logs/error.log info;
# 用于限制core dumps文件的大小
# linux系统中,当进程被意外终止时会将内存写入核心映像(core文件)中
worker_rlimit_core size;
# 指定coredump文件生成目录
# 要确保worker进程有权限向path中写入
working_directory path;
# 绝对路径和相对路径都可
include path/file;
# 保存master进程ID的文件存放路径
pid logs/nginx.pid;
# Nginx worker进程运行的用户和用户组
# 指定master进程启动后,fork出的worker进程的用户和用户组
# 若在configure时,启用了--user=username和--group=groupname时,以参数为准
user nobody nobody;
# worker进程最大打开文件的数目
# 专业点的讲法:worker可以打开的最大文件句柄数
# 若没有设置该项,该值将被系统限制
# 这个值较低,会导致“too many open files”出现
worker_rlimit_nofile 1024;
# SSL硬件加速配置
# 可以通过openssl engine -t来查询本机是否拥有SSL硬件加速
ssl_engine device;
# worker进程优先级
# 优先级范围:-20~+19,-20为最高,+19为最低,越高的进程将享受到越多的CPU时间
# 内核进程的优先级一般为-5,不建议低于这个值
worker_priority 0;
# 该模块中包含nginx中所有处理连接的设置
events {
# 是否打开accept锁
# 该锁可以让多个worker进程轮流地、序列化地榆新的客户建立TCP连接
# 当某worker进程建立连接数达到7/8时,会大大地减小该进程建立连接的机会
# 负载均衡
accept_mutext on
# accept可能会用到的文件锁
# 编译程序、操作系统等因素有可能导致nginx无法支持原子所,此时将会使用这个文件实现accept锁
lock_file logs/nginx.lock;
# 使用accept锁后到真正建立连接之间的延迟时间
# 由于accept锁不是个阻塞锁
# 所以如果一个进程试图取得未果,将会立刻返回结果
# 而该项配置的时间正是worker进程再次尝试取得锁的间隔时间
accept_mutex_delay 500ms;
# 批量建立新的连接
# 当事件模型通知有新的连接时,尽可能地对本次调度中客户端发起的所有TCP请求都建立连接
multi_accept off;
# 选择事件模型
# 对linux来说,可供选择的模型有poll、select、epoll三种
use[kqueue|rtsig|epoll|/dev/poll|select|poll|eventport];
# 向默认IP地址输出debug级别日志
debug_connection 192.168.0.1;
# 每个worker进程可以处理的最大连接数
# 系统的socket连接的限制约是64k
worker_connections 1024;
}
# 所有http配置项都必须直属于http模块、server模块、location模块、upstream模块或if模块
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;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
#
upstream upstream_name{
server xxxxx weight=1;
server xxxxx weight=2;
....
}
# 每个server块就是一个虚拟主机,它只处理与之相对应的主机域名请求
server {
# 监听端口
# listen 127.0.0.1:8080;
# listen 127.0.0.1;(不加监听端口默认监听80端口)
# listen ip/port/ip&port param1 param2....
# 常见参数:
# default:将所在的server块作为整个Web服务的默认server块,如果没有设置默认,nginx将以第一个server块为默认
# default_server:同上
# backlog=-1:表示TCP中backlog队列的大小,默认-1表示不予设置
# rcvbuf=size:监听句柄的SO_RCVBUF参数
# sndbuf=size:监听句柄的SO_SNDBUF参数
# accept_filter:设置accept过滤器,支队FreeBSD系统有用
# deferred:
# bind:绑定当前端口/地址对,只有同时对一个端口监听多个地址时才会生效
# ssl:在当前监听的端口上建立的连接必须基于SSL协议
listen 80;
# 主机名称
# 可以配置多个服务名,用空格分隔
server_name localhost;
# 为提高快速寻找相应server_name的能力,nginx使用散列表来存储server name。
# 该设置用来规定散列桶的大小
server_names_hash_max_size 32|64|128;
#charset koi8-r;
#access_log logs/host.access.log main;
# 该块会尝试根据用户请求中的URI来匹配其后的一段表达式
# 如果可以匹配到,就会选择这个location块中的配置进行处理
# =/:完全匹配/
# ~:表示大小写敏感
# ~*:大小写不敏感
# ^~:uri的前部分能匹配即可
# @:nginx服务内部请求之间的重定向,此类不参与直接处理用户请求
# /:以上的匹配逻辑皆为“如果匹配……则”,若需要“如果不匹配……则”,就只好用/表达匹配不到的运行逻辑
# 可以使用正则
location [uri表达式] {
# 用root方式定义资源路径
# 会将URI请求完整地映射到资源路径
# 也就是说得到的最终资源路径是:root指定路径(绝对路径)+uri
# 默认会指定到nginx安装目录的html文件夹
root html;
# 用alias方式定义资源路径
# 会将URI与资源路径绑定
# alias后可以跟正则表达式
alias some_route;
# 首页配置
index index.html index.htm;
}
#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;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename ali as another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# 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 / {
# root html;
# index index.html index.htm;
# }
#}
}