总体而言,nginx的配置比起apache来是要简洁很多,而言容易理解得多的。我们先看一个简化版的配置文件nginx.conf:
#user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } 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; server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; } #error_page 404 /404.html; // ... ... } # 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; # index index.html index.htm; # } #} // ... ... }
1. 可以看到nginx的配置文件可以分成两大部分:
1)对nginx自己的进程的相关的配置:1.worker进程的数量;2.每个进程最多能够处理多少个连接;3.运行nginx的用户;4.日志文件;5.pid文件地址
2)对http服务器的配置,也就是 http 虚拟机的配置;
2. nginx进程相关的配置:
worker_processes 配置worker进程的数量,一般根据负载和CPU来将其设置成:cpu * 核心数,设置的太多会造成对CPU的争用;
worker_connections 配置每个worker进程能够处理多少个连接,一般根据内存,cpu, 负载来配置;
3. http虚拟机的配置:
nginx处理http的虚拟机的配置都在http段内。http段中又分为:http的全局配置;针对每个server的配置,也就是针对每个虚拟主机的配置;可以看到在nginx中可以像apache一样配置多个虚拟主机。而且要比apache配置要简单得多。每一个server段配置一个虚拟主机,虚拟主机中主要配置让其监听哪个端口,进来的url如何通过location的配置去访问磁盘上哪个目录中存放的哪个文件,所以location的配置才是重点所在。
4. server的配置:
server {
listen 80;
server_name www.baidu.com;
location / {}
// ... ...
}
listen表示监听那个端口,对于http我们一般都是监听80端口。server_name表示我们的域名,也就是网址,比如:www.baidu.com, www.cnblogs.com等等。不同的server可以监听同一个80端口,但是server_name不能相同,也可以server_name相同,但是监听端口不一样。server段中的location段主要配置对于进入本虚拟主机的url的处理。
4. location的配置:
对于根据server端中配置的 listen 监听端口和 server_name 域名而进入对于虚拟主机的url,会根据 location 的匹配情况来访问某个匹配的 location,最后访问到服务器上的某个页面。而 url 到 location的匹配分为了三种情况: