Nginx配置文件详解

1、Nginx简介

Nginx(engine x)是一个轻量级的开源Web服务器软件,也可用作反向代理、负载均衡器和HTTP缓存。它的特点是占用资源少,能够处理更多的并发连接,具有高扩展性和高可靠性,因此被越来越多的大型网站所使用。Nginx采用事件驱动、异步非阻塞的方式来处理客户端的请求,支持HTTP、HTTPS、SMTP、POP3、IMAP等协议。同时,Nginx还集成了许多常用的功能,例如:反向代理、负载均衡、动态HTTP重写、访问控制、FastCGI接口、HTTPS加密等等。Nginx的设计目标是高性能、高并发、高可靠性和低资源消耗,因此被广泛应用于大型网站和应用场景中。

2、Nginx安装

Nginx在Linux中的安装教程:https://blog.csdn.net/weixin_56817591/article/details/131176741?spm=1001.2014.3001.5501

Nginx在Windows中的安装教程:在 Nginx官网 中下载需要的Nginx版本,直接解压缩到一个任意目录即可使用。

3、Nginx目录结构

Nginx1.22.0版本的目录结构通常如下所示:

/etc/nginx/             # 配置文件目录
|-- nginx.conf          # Nginx主配置文件
|-- conf.d/             # 存放Nginx的虚拟主机等配置文件
|-- sites-available/    # 存放Nginx的虚拟主机配置文件
|-- sites-enabled/      # 存放Nginx的虚拟主机符号链接
|-- snippets/           # 存放Nginx配置文件片段
|-- fastcgi_params      # 存放与FastCGI有关的参数文件
|-- scgi_params         # 存放与SCGI有关的参数文件
|-- uwsgi_params        # 存放与uWSGI有关的参数文件
|-- win-utf             # 存放用于Windows编码的文件

/var/log/nginx/         # 存放Nginx的日志文件
|-- access.log          # Nginx访问日志
|-- error.log           # Nginx错误日志

/var/cache/nginx/       # 存放Nginx的缓存目录

/var/run/               # 存放Nginx的进程ID文件(`pid`)
|-- nginx.pid           # Nginx的主进程文件

/usr/share/nginx/html/  # 存放Nginx默认的Server根目录
|-- index.html          # 默认网页文件
|-- 50x.html            # 错误页面文件

/usr/sbin/nginx         # Nginx的可执行文件

以上是Nginx1.22.0版本的目录结构,可以看出与其他版本的Nginx目录结构基本相同。需要注意的是Nginx的版本不同,目录结构可能会有所变化。

4、Nginx主配置文件nginx.conf

以下是Nginx1.22.0版本的主配置文件nginx.conf里面的内容,需要注意的是Nginx的版本不同,主配置文件nginx.conf里面的内容可能会有所变化。

4.1、nginx.conf 文件结构

...           # global块

events {      # events块
   ...
}

http          # http块
{
    ...                # http全局块    
    upstream backend { # upstream块
        server 192.168.0.1:8080;
        server 192.168.0.2:8080;
        ...
    }    
    server             # server块(可配置多个)
    { 
        ...                  # server全局块
        location [PATTERN]   # location块(可配置多个)
        {
            ...
        }
        location [PATTERN] 
        {
            ...
        }
    }
    server
    {
        ...
    }
    ...     #http全局块
}
nginx.conf文件结构中块内容详解:

global块:  该块中的配置项作用于整个Nginx服务器,通常包含user、worker_processes等指令。

events块:  该块定义了Nginx事件模型的相关配置,常见的配置包括worker_connections、use、multi_accept等指令。

http块:    该块包含了所有HTTP模块的配置指令,通常包括server、upstream、types、error_log等指令,用于定义Nginx的HTTP服务。

upstream块:该块用于定义Nginx的负载均衡集群,包含server指令以及它们的参数。
   
server块:  该块用于定义虚拟主机的相关配置,通常包括listen、server_name、root、index、access_log等指令,用于定义Nginx虚拟主机的监听端口、域名、文档根目录、默认文件、访问日志等。

location块:该块用于匹配URL地址,通常包含proxy_pass、fastcgi_pass、rewrite、expires等指令,用于定义Nginx的反向代、FastCGI、URL重写、缓存等。

通过以上分析,我们可以看出,nginx.conf文件的结构对于 Nginx 服务器的性能、安全、稳定等诸多方面都有着重要的影响。在配置Nginx时,需要根据实际需求进行设置,才能达到最佳的效果。在nginx.conf文件中,不同的块和指令可以进行多次定义,以满足不同的需求。同时,需要注意块与块之间的嵌套关系和格式规范,以确保配置文件的正确性和Nginx的正常运行。

4.2、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;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # 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;
    #    }
    #}


    # 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;
    #    }
    #}

}

4.3、nginx.conf 默认的配置内容详解

# 用于指定Nginx进程运行的用户,默认为nobody。该用户需要具备Nginx运行所需的权限,一般情况下不建议使用root用户运行Nginx。
user  nobody;

# 指定Nginx使用的worker进程数,一般推荐将该值设置为处理器核心数的2倍。
worker_processes  1;

# 用于指定Nginx错误日志的存储路径和记录级别,可以设置多个错误日志记录级别,每个记录级别之间用空格分隔。
error_log  logs/error.log;  # 指令用于指定错误日志的存储路径。
error_log  logs/error.log  notice;  # 指令用于指定记录级别为notice的错误日志。
error_log  logs/error.log  info;  # 指令用于指定记录级别为info的错误日志。

# 指定Nginx主进程的pid文件路径,一般用于管理Nginx服务器进程。该文件记录了Nginx主进程的pid,可以通过该pid文件进行控制和管理。
pid        logs/nginx.pid;

# events块是Nginx配置文件中的一个块,用于配置Nginx事件模型的相关参数。
events {
    # 用于指定每个worker进程能够同时处理的最大连接数。
    worker_connections  1024;
}

# http块是Nginx配置文件中的一个块,主要用于配置HTTP服务器的全局参数和默认行为。
http {
    # 用于引入其他文件,该指令用于引入Nginx中所需的MIME类型声明文件,即mime.types文件。
    include       mime.types;
   
    # 定义默认的MIME类型,当请求文件的MIME类型无法匹配到定义的具体类型时,Nginx会调用默认类型进行处理。
    default_type  application/octet-stream;

    # 用于定义Nginx日志格式,具体定义方法通过格式字符串来实现。
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    
    # 用于指定HTTP访问日志的存储路径和日志格式,可以设置多个日志格式和文件路径。
    access_log  logs/access.log  main;

    # 用于开启Nginx的高效传输文件功能。
    sendfile        on;
    
    # 用于开启TCP的Nagle算法,避免出现小数据包的情况,提升数据传输效率。
    tcp_nopush     on;

    # 用于设置HTTP长连接的超时时间。HTTP长连接是指建立一次TCP连接后,客户端和服务器之间可以进行多次HTTP请求和相应,以避免在短       时间内频繁地建立和关闭TCP连接,提升性能。
    keepalive_timeout  0;  # 为0时,表示不开启长连接。
    keepalive_timeout  65; # 为65时,表示每个长连接的超时时间为65秒。
    
    # 用于开启Nginx的压缩功能,在传输文件时对文件进行压缩,以减少网络传输量。
    gzip  on;

    
    server {
        # 指定该HTTP服务器监听本机的80端口。
        listen       80;
        
        # 配置HTTP服务器所使用的域名为localhost。
        server_name  localhost;
        
        # 配置HTTP服务器使用的字符编码为koi8-r。该参数用于设置响应头中的Content-Type字段指定服务器处理的数据采用的字符编码。
        charset koi8-r;
        
        # 配置HTTP服务器的访问日志。其中,access_log指令用于开启访问日志记录功能,logs/host.access.log指明日志记录的位置和           文件名,main指定日志格式。
        access_log  logs/host.access.log  main;
        
        # 配置HTTP服务器的根目录为/,设定默认的首页文件为index.html和index.htm。当请求到达服务器后,Nginx将会使用html子目           录下对应的文件来处理请求。
        location / {
            root   html;
            index  index.html index.htm;
        }

        # 当HTTP服务器返回404错误时,该配置会将错误页面重定向到/404.html的静态页面。
        error_page  404              /404.html;

        # 这句话表示将服务器错误页面重定向到名称为50x.html的静态页面。
        # redirect server error pages to the static page /50x.html
        
        # 当HTTP服务器返回5xx系列错误时,该配置会将错误页面重定向到/50x.html的静态页面。这里的5xx系列错误包括了500、502、             503、504等多种错误。
        error_page   500 502 503 504  /50x.html;
        
        # 指定/50x.html页面所在的根目录为html。当用户访问/50x.html页面时,Nginx会在html目录下查找对应的静态页面文件,并将其           返回给客户端。
        location = /50x.html {
            root   html;
        }

        # 这段Nginx配置将PHP脚本的请求代理到运行在本地127.0.0.1:80端口的Apache服务器上进行处理。
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        
        # 这行配置使用正则表达式匹配所有以.php为扩展名的请求,即将所有PHP文件的请求匹配出来。
        location ~ \.php$ {
            # 该指令指定将请求代理到本地127.0.0.1地址上。它将所有匹配出来的PHP文件请求转发到该地址,并等待目标服务器处理并返               回处理结果。
            proxy_pass   http://127.0.0.1;
        }

        # 这段Nginx配置将将PHP脚本的请求代理到运行在本地"127.0.0.1:9000"地址上的 FastCGI 服务器进行处理。
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        
        # 该行配置使用正则表达式匹配所有以 .php 结尾的请求,将所有 PHP 文件的请求匹配出来。
        location ~ \.php$ {
            # 指定了 Web 服务器的根目录,用于定位 PHP 文件的位置。
            root           html;
            # 指定了将请求代理到本地运行在 127.0.0.1:9000 地址上的 FastCGI 服务器处理,用于接收 PHP 文件的解析请求。
            fastcgi_pass   127.0.0.1:9000;
            # 表示当请求的 URI 指向一个目录时,使用 index.php 作为默认文档。
            fastcgi_index  index.php;
            # 将解析后的 PHP 文件路径传递给 FastCGI 服务器,以便 FastCGI 服务器可以定位和处理请求。
            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            # 引入了 FastCGI 的参数配置文件,通常用于定义共享的 FastCGI 参数。
            include        fastcgi_params;
        }

        # 这段 Nginx 配置用于在 Apache 和 Nginx 共存时,防止 Nginx 直接访问 Apache 的 .htaccess 文件。
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        
        # 该行配置使用正则表达式匹配所有以 .ht 开头的请求,包括 .htaccess 文件等这些需要 Apache 处理的文件。
        location ~ /\.ht {
            # 拒绝所有请求,也就是禁止访问这些文件。
            deny  all;
        }
    }

    # 这段文字描述了Nginx配置文件中一个混合IP、名称和端口的虚拟主机的配置。
    # another virtual host using mix of IP-, name-, and port-based configuration
    
    server {
        # 表示监听本机的8000端口,
        listen       8000;
        # 表示绑定到名为somename的特定通信地址上的8080端口。
        listen       somename:8080;
        # 配置HTTP服务器所使用的域名。其中,somename为主域名,alias和another.alias为该服务器的别名。当客户端通过这些域名访           问该服务器时,Nginx会将请求路由到该服务器上。
        server_name  somename  alias  another.alias;
        
        # 配置HTTP服务器的根目录为/,设定默认的首页文件为index.html和index.htm。当请求到达服务器后,Nginx将会使用html子目           录下对应的文件来处理请求。
        location / {
            root   html;
            index  index.html index.htm;
        }
    }

    # 这段文字描述了Nginx配置文件中一个HTTPS服务器的配置
    # HTTPS server
    
    server {
        # 指定HTTPS服务器的监听端口和协议,其中443是HTTPS默认端口号,ssl表示启用SSL/TLS加密通信。
        listen       443 ssl;
        # 指定HTTPS服务器绑定的域名为localhost。
        server_name  localhost;
 
        # ssl_certificate cert.pem及ssl_certificate_key cert.key: 配置服务器所使用的SSL/TLS证书和私钥。
        ssl_certificate      cert.pem;
        ssl_certificate_key  cert.key;

        # ssl_session_cache shared:SSL:1m及ssl_session_timeout 5m: 配置SSL会话缓存和超时时间。
        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
        
        # 配置允许使用的SSL密码套件。
        ssl_ciphers  HIGH:!aNULL:!MD5; 
        # 配置使用服务端优先的SSL密码套件。
        ssl_prefer_server_ciphers  on;

        # 配置HTTPS服务器的网站根目录为/,同时设定默认的首页文件为index.html和index.htm。当请求到达服务器后,Nginx将会使用           html子目录下对应的文件来处理请求。
        location / {
            root   html;
            index  index.html index.htm;
        }
    }

}

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐