09 必要的全局配置选项
更新时间:2019-12-24 09:40:58
不想当将军的士兵,不是好士兵。——拿破仑

前言

前面我们说了关于Nginx很多的东西,比如Nginx作用,事件机制,如何选择事件机制等等,我们在工作中,绝大多数都是把Nginx作为一个HTTP服务器或者一个反向代理服务器(PS:我还没见过有人用Nginx做其他的用途,比如Nginx可以作为邮件服务器,but,我还从未见过~)。
这一节内容我们用一个配置文件来体验一下一个可用的Nginx配置文件长什么样子。

配置文件初体验

俗话说"人靠衣裳马靠鞍",Nginx也要进行配置才能够使用,我们看一下怎样才能把Nginx打扮的漂漂亮亮的吧。

user  nobody;
worker_processes  auto;

error_log   "/worker/log/error.log"   warn;
pid         "/worker/pid/nginx.pid";

events {
  use epoll;
  worker_connections  8192;
}

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  "/worker/log/access.log"  main;



  server_names_hash_bucket_size 128;
  client_header_buffer_size 4k;
  large_client_header_buffers 4 32k;
  client_max_body_size 20m;
  client_body_buffer_size 4m;

  sendfile        on;
  tcp_nopush      on;
  tcp_nodelay     on;


  gzip on;
  gzip_min_length 1k;
  gzip_buffers 4 16k;
  gzip_http_version 1.0;
  gzip_comp_level 2;
  gzip_types text/plain application/x-javascript text/css application/xml;
  gzip_vary on;

  server {
    listen  80;
    server_name www.test.com;
    location ~ \.php$ {
      root            /project/src;
      fastcgi_pass    127.0.0.1:9000;
      fastcgi_index   index.php;
      fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
      include         fastcgi.conf;
    }
    location / {
      root            /static;
    }
  }
}

上面是一个真实服务器中Nginx配置的简略版,"麻雀虽小五脏俱全”,它配置了一个HTTP服务器,可以处理静态文件以及php动态请求。

我们先使用这个配置文件启动一下Nginx,来体验一下……
图片描述

全局配置

user指令

我们知道,操作系统中的所有资源都具有所属者以及其他各种访问权限(强大的Linux也不例外~)。这种权限控制可以让操作系统变得很安全,防止黑客破坏我们的系统。
Nginx提供了user全局配置指令来设置worker进程的所属者,这样就可以让Nginx访问特定权限的资源,保护我们服务器的稳定性。
图片描述
我们可以通过ps命令查看worker进程,可以看到这个进程的所属者是nobody用户。
我们下面体验一下这个user的作用。
在上面体验Nginx的时候,我们成功的访问到了服务器上面的hello.html文件,并且返回了hello Nginx字符串。
下面我们修改hello.html文件的权限,删除nobody的可读权限,重新访问这个文件,这个时候Nginx就会返回403错误。
图片描述
这里就是user指令的作用,大家是否熟悉了呢?

worker_processes 指令

我们前面说过,Nginx是一个Master-Worker的工作模式。Nginx在启动之后会生成一个master进程,master不处理请求,而是生成和管理worker进程,worker进程主要负责干活(处理请求)。
那么大家可能要问了?这个值应该设置为多大呢?是不是这个值越大越好?当然不是了,我们看一下大神们给出的建议:

nginx doesn't benefit from more than one worker per CPU.
If Nginx is doing CPU-intensive work such as SSL or gzipping and you have 2 or more CPUs/cores, then you may set worker_processes to be equal to the number of CPUs or cores.

所以worker_processes的值并不是越多越好,最好是和我们服务器CPU核数量一样。Nginx提供了一个默认的auto值就是这样的原理。

event配置

event是配置Nginx使用的事件处理机制的。这一部分是非常重要的。我们在上一节中介绍了关于如何选择事件处理机制以及为什么要这么选,大家可以复习一下~

http配置

http配置是一个非常重要的配置,这部分也是我们最关心的部分,这是让Nginx提供HTTP服务必不可少的,我们在后面的内容中会详细的介绍这部分。

总结

我们在这一节内容中简单的介绍了两个几个必要的全局配置项,包括了user, worker_processes, event,和http,让大家对整体的配置有一个概念性的认识,后面遇到的时候我们还会详细的介绍。

}