1.基本配置(默认配置):
#user nobody; 配置nginx worker进程所属用户及用户组,如果没有写组名,则默认组名和用户名一致,默认用户为nobody
worker_processes 1; 配置nginx worker进程数量,一般和机器CPU数量一致
以下是错误日志配置,logs/error.log是位置,notice、info是日志级别,该配置可以配置到任意上下文中
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
以下是pid文件配置,pid文件记录了master进程的PID
#pid logs/nginx.pid;
以下是events上下文,记录了网络事件相关配置
events {
以下配置了每个worker能处理的连接数,注意不能超过操作系统最大限制
nginx实际处理的连接数为 worker_processes*worker_connections
worker_connections 1024;
}
以下是http上下文,记录了http事件相关配置
http {
include mime.types; 引入mime.types文件内的配置
default_type application/octet-stream; 配置默认MIME类型
以下配置是配置日志格式
#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; 是否允许调用sendfile函数
#tcp_nopush on; 是否允许TCP_NOPUSH类型的socket请求
keepalive_timeout 65; 这两条是长连接超时时间配置
#gzip on; 是否开启gzip压缩
以下是server上下文,用于配置虚拟主机
server {
listen 80; 监听的端口,也可以配置为域名、文件路径等,可以同时监听多个对象
server_name localhost; 主机名
#charset koi8-r; 编码
#access_log logs/host.access.log main;
location上下文,用来配置特定uri的访问规则,这里的uri是根路径,支持正则表达式
location / {
#root代表请求映射到哪个路径,index代表页面配置
root html;
index index.html index.htm;
}
错误页面配置
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
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 / {
# root html;
# index index.html index.htm;
# }
#}
}
nginx的上下文主要有:
- main:最外层,不像其它上下文需要显式写出名称和大括号,主要是nginx的系统配置
- events:网络处理相关配置
- http:http请求配置
- upstream:反向代理配置,在http中
- mail:smtp/imap/pop3请求配置
- server:在http、mail之中,定义虚拟主机
- location:server之中,定义uri配置
- server:在http、mail之中,定义虚拟主机
各上下文下面的配置是由各个模块定义的,非常复杂,请查阅官网文档或者源代码
例如http上下文的listen配置,官网显示其定义在ngx_http_core_module模块,去nginx源码的src/http/ngx_http_core_module.c文件,就能找到相关定义:
……
static ngx_command_t ngx_http_core_commands[] = {
……
{ ngx_string("listen"),
NGX_HTTP_SRV_CONF|NGX_CONF_1MORE,
ngx_http_core_listen,
NGX_HTTP_SRV_CONF_OFFSET,
0,
NULL },
……
ngx_command_t实际就是ngx_command_s结构体(ngx_command_t在ngx_core.h中使用typedef定义,ngx_command_s在ngx_conf_file.c中定义),具体结构如下:
struct ngx_command_s {
ngx_str_t name;
ngx_uint_t type;
char *(*set)(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
ngx_uint_t conf;
ngx_uint_t offset;
void *post;
};
2.反向代理配置&重定向配置(以跳转百度为例)
#效果:访问服务器自动跳转百度首页
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#反向代理配置,这里只配置了一项,如果有多个配置,就可以使用负载均衡
upstream baidu {
server www.baidu.com;
}
server {
listen 80;
server_name localhost;
#代理配置,主要是做跳转
location / {
proxy_pass http://baidu;
proxy_set_header Host www.baidu.com; #这里不能写$host,会出现403 forbidden错误
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_max_temp_file_size 0;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
主要是加了upstream上下文,修改了 location / 上下文
如果这样修改效果一样(原理不一样):
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
server {
listen 80;
server_name localhost;
rewrite ^/ http://www.baidu.com;
index index.html;
}
}
rewrite配置是把指定uri的请求进行重定向,这里是将根目录的请求重定向到百度首页。
如果