南琴浪博客

Nginx 基础教程(一)建立一个网站

12/31/2017

鉴于毕竟多数 Nginx 用户对基本配置项的理解几乎为 0,还是决定来写一些基础的东西。遂有了这个Nginx 基础教程系列。本文介绍用 Nginx 建立一个网站所需要的最基本的配置项。

Nginx 的配置文件构成

Nginx 的默认配置文件一般为 nginx.conf,这个文件内你需要写入 Nginx 的最基本的运行配置,这个文件也被称作 Nginx 的全局配置文件。这个文件内的配置对整个 Nginx 生效,且实际上 Nginx 只会读取这个文件内包括的配置,它是 Nginx 的唯一配置文件,其它的配置文件都需要使用 include 来引入。

与之对应的,有另外一个概念,叫做站点配置文件。这个文件一般可有可无。文件名可以随意,可以命名为例如website.conf。如果要使用额外的配置文件,需要在全局配置文件 nginx.conf 的 http 段配置中写入下面这行,来将这个配置导入到 Nginx:

http {
    ...
    include website.conf;
}

全局配置

上文已提到,nginx.conf 是全局配置文件。这个文件需要至少包括下列配置项:

# 运行 Nginx 的用户组和用户名。一般不建议使用 root 账户,可以另外创建一个 www www 用户
user                www www;
# 运行 Nginx 的进程数,可以设置为 CPU 核心数。我建议指定为 auto 自动
worker_processes    auto;
# 错误日志的生成路径和记录等级
error_log           /home/nginx/logs/error.log crit;
# 运行 Nginx 的 pid 生成路径
pid                 /home/nginx/sbin/nginx.pid;
# 最大访问文件数限制
worker_rlimit_nofile  2048;

events
    {
        # Nginx 使用的事件模型,有其它值例如 kqueue 等。一般保持这个值为 epoll 即可
        use                 epoll;
        #单个 worker process 进程的最大并发链接数。所以 Nginx 最大总连接数 = [worker_processes * worker_connections]
        worker_connections  2048;
    }

http
    {
        # Nginx 的默认指定文件类型名称的配置文件
        include         mime.types;
        # Nginx 的默认文件类型
        default_type    application/octet-stream;

        # 导入你的站点配置文件
        include         website.conf;
}

站点配置

那么接下来就要写站点配置了,这里面包括了你要建立的网站的配置项。本文按照 HTTP 和 HTTPS 列举出两种最基本的站点配置。

HTTP

server
    {
        # Nginx 的监听端口,其实可以随意。这里只是因为 HTTP 站点访问默认是 80 端口
        listen  80;

        # 你的网站的文件的所在根路径,使用绝对路径
        root    /home/site;

        # 访问地址未指定要访问的文件名时,默认访问的文件名
        # 例如访问某网站首页,这个 index.php 就是首页的文件
        index   index.php;

        # 访问日志的生成路径
        access_log   /home/nginx/access-log;

        # 你网站要使用的域名
        server_name  example.example.com;
}

HTTPS

server
    {
        # Nginx 的监听端口,其实可以随意。这里只是因为 HTTPS 站点访问默认是 443 端口
        listen  443;

        # 你的网站的文件的所在根路径,使用绝对路径
        root    /home/site;

        # 访问地址未指定要访问的文件名时,默认访问的文件名
        # 例如访问某网站首页,这个 index.php 就是首页的文件
        index   index.php;

        # 访问日志的生成路径
        access_log   /home/nginx/access-log;

        # 你网站要使用的域名
        server_name  example.example.com;

        # 下面是指定 SSL 的相关配置,均是必填项目

        # 开启 SSL
        ssl  on;

        # 使用的 TLS 版本
        ssl_protocols  TLSv1.1 TLSv1.2;

        # SSL 站点证书的所在路径,使用绝对路径
        ssl_certificate      /home/crt/example.cer;

        # SSL 站点证书密钥的所在路径,使用绝对路径
        ssl_certificate_key  /home/crt/example.key;
}