NGINX和NGINX Plus同其他服务一样,他们都是使用基于文本的特定格式配置文件。这个配置文件默认为nginx.conf,而且NGINX Plus是将它放置在/etc/nginx 目录中的。(对于开源版本的NGINX,配置文件的路径取决于安装nginx的包管理软件和操作系统。典型的是/usr/local/nginx/conf, /etc/nginx, 或 /usr/local/etc/nginx 中的一个)
配置项
配置文件是由配置项和他们的参数组成的。每一个简单的配置项都以分号结尾。其他的一些复杂配置项用花括号将一组相关的配置项包含起来形成容器,他们通常被称作块。下面是一些简单配置项的示例:
user nobody;
error_log logs/error.log notice;
worker_processes 1;
特定特征的配置文件
为了使配置文件维护更加方便,我们建议你将配置文件切分为一系列的特定的配置存储在/etc/nginx/conf.d 目录下,然后用在nginx.conf
中用include
指令来引用这些独立的配置。
include conf.d/http;
include conf.d/stream;
include conf.d/exchange-enhanced;
上下文
一些被称作上下文的顶级配置项容器从不同的方面将所有配置项分类组合。
- events 通用的连接处理
- http Http
- mail Mail
- stream TCP 和 UDP
放置在这些容器之外的配置项被认为是在主上下文中。
虚拟服务
在每一个请求处理的上下文中,你都可以包含一个或多个server
块来定义控制请求处理的虚拟主机。在不同的请求处理中,server上下文包含的配置项都是不一样的。
运行时控制nginx
这部分主要介绍Nginx启动时开启的进程以及如何控制他们
master进程和worker进程
nginx只有一个master进程和一个或多个worker进程。而且如果开启了缓存,缓存加载器和缓存管理器进程也会在nginx启动的时候开始运行。
master进程的主要工作是读取和检查配置文件,同时还会维护worker进程。
worker进程才是用来实际处理请求。nginx依赖于操作系统本地操作来高效的将请求分发给多个worker进程。
worker进程的数量是由nginx.conf
配置文件中的worker_processes
来指定的,这个值既可以设置为固定值也可以根据可用CPU核心数来动态设置。
控制NGINX
为了重新加载配置文件,你有三种选择
- 停止NGINX
- 重启NGINX
- 发送一个信号指令给master进程
可以通过运行nginx -s命令来给一个运行中的nginx发送指令。
nginx -s <SIGNAL>
<SIGNAL>
的可以是如下这些值:
- quit 优雅退出
- reload 重新加载配置文件
- reopen 重新打开日志文件
- stop 立即停止(快速停止)
我们还可以使用kill命令来给master进程直接发送指令。master进程的进程id默认是写入在/usr/local/nginx/logs or或/var/run目录下的nginx.pid文件中。查看Controlling nginx获取更多控制指令。
user nobody; # a directive in the 'main' context
events {
# configuration of connection processing
}
http {
# Configuration specific to HTTP and affecting all virtual servers
server {
# configuration of HTTP virtual server 1
location /one {
# configuration for processing URIs starting with '/one'
}
location /two {
# configuration for processing URIs starting with '/two'
}
}
server {
# configuration of HTTP virtual server 2
}
}
stream {
# Configuration specific to TCP/UDP and affecting all virtual servers
server {
# configuration of TCP virtual server 1
}
}
生产使用的nginx配置项
[root@mldb002 conf]# vim nginx.conf
user root root;
worker_processes 4;
events {
worker_connections 1024;
multi_accept on;
use epoll;
}
http {
include mime.types;
default_type application/octet-stream;
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
sendfile on;
keepalive_timeout 65;
client_max_body_size 5m;
tcp_nodelay on;
server_tokens off;
gzip on;
gzip_types application/javascript text/javascript text/css image/png;
proxy_set_header Host $host:$server_port;
proxy_set_header Referer $http_referer;
proxy_set_header Cookie $http_cookie;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_buffer_size 64k;
proxy_buffers 8 64k;
proxy_busy_buffers_size 128k;
proxy_connect_timeout 300s;
proxy_ignore_client_abort on;
proxy_cache_path cache levels=1:2 keys_zone=hyb_cache:20k;
proxy_cache_valid 200 5s;
proxy_temp_path /u01/nginxtemp;
log_format access '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
include xxx.xxx.com.https.conf;
include xxx.xxx.com.conf;
}
网友评论