Nginx目录与配置文件

1,572 阅读6分钟

一、Nginx目录

Nginx文件结构比较简洁,主要包括配置文件和二进制可执行程序,通过安装包形式安装的 nginx 文件结构跟各 Linux 发行版目录规则存放配置文件和二进制文件的位置,目录结构及文件功能如下:

[root@localhost ~]# tree /usr/local/nginx
/usr/local/nginx
├── client_body_temp                 # POST 大文件暂存目录
├── conf                             # Nginx所有配置文件的目录
│   ├── fastcgi.conf                 # fastcgi相关参数的配置文件
│   ├── fastcgi.conf.default         # fastcgi.conf的原始备份文件
│   ├── fastcgi_params               # fastcgi的参数文件
│   ├── fastcgi_params.default      
│   ├── koi-utf
│   ├── koi-win
│   ├── mime.types                   # 媒体类型
│   ├── mime.types.default
│   ├── nginx.conf                   #这是Nginx默认的主配置文件,日常使用和修改的文件
│   ├── nginx.conf.default
│   ├── scgi_params                 # scgi相关参数文件
│   ├── scgi_params.default  
│   ├── uwsgi_params                 # uwsgi相关参数文件
│   ├── uwsgi_params.default
│   └── win-utf
├── fastcgi_temp                     # fastcgi临时数据目录
├── html                             # Nginx默认站点目录
│   ├── 50x.html                     # 错误页面优雅替代显示文件,例如出现502错误时会调用此页面
│   └── index.html                   # 默认的首页文件
├── logs                             # Nginx日志目录
│   ├── access.log                   # 访问日志文件
│   ├── error.log                   # 错误日志文件
│   └── nginx.pid                   # pid文件,Nginx进程启动后,会把所有进程的ID号写到此文件
├── proxy_temp                       # 临时目录
├── sbin                             # Nginx 可执行文件目录
│   └── nginx                       # Nginx 二进制可执行程序
├── scgi_temp                       # 临时目录
└── uwsgi_temp                       # 临时目录

二、Nginx配置文件

Nginx 主配置文件/usr/local/nginx/conf/nginx.conf 是一个纯文本类型的文件,整个配置文件是以区块的形式组织,通常每一个区块以一对大括号{}来表示开始与结束。提示:若编译安装则 nginx.conf 位于编译时所指定目录。

Main 位于 nginx.conf 配置文件的最高层;

Main 层下可以有 EventHTTP 层;

Http 层下面允许有多个 Server 层,用于对不同的网站做不同的配置;

Server 层下面允许有多个 Location,用于对不同的路径进行不同模块的配置。

全局配置部分用来配置对整个 server 都有效的参数。主要会设置一些影响 nginx 服务器整体运行的配置指令,主要包括配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等

#设置运行用户,当运行NGINX时,进程所使用的用户,则进程拥有该用户对文件或目录的操作权限。
#user  nobody;
#设置工作进程数量,一般情况下工作进程数等于CPU核心数。
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进程可处理的并发连接数量,可根据需求合理配置此值。建议与"worker_rlimit_nofile"指令的值一致或更小。
    worker_connections  1024;
}

#==核心配置==#
http {

	#设置还包含其他配置文件,“mime.types”文件,记录MIME类型与文件后缀的映射关系,MIME类型是互联网媒体类型的缩写。所以该文件是用于WEB服务可以识别的、允许用户上传的这些后缀相关的媒体文件。
    include       mime.types;
	
	#如果mime类型未匹配上文件类型,那么就会使用二进制流的方式进行传输。
    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" or "off","on"表示启用,"off"表示禁用。当线程响应时,"sendfile()"函数会报告线程数据不在内存中而是在硬盘中,
	#则线程直接去硬盘拿到响应数据直接传送给用户,而无需调用内存去硬盘拿响应数据,省去了调用内存的步骤,在小型WEB项目中可以提高请求响应效率,若是重量
	#级WEB项目,为了平衡磁盘IO则不建议开启。我们也可以将此指令称之为高效传输模式。
    sendfile        on;
	
	#启用或禁用TCP_NOPUSH套接字选项,"on" or "off","on"表示启用,启用此项的前提是必须开启"sendfile","off"表示禁用。有时候在传输一个响应数据时,可能会
	#产生多个小块数据包传出,可能这个小块数据包头部大小为30字节,而真正数据信息只有1字节,在高并发环境下会导致网络拥塞、带宽不够用问题。开启此项则传出
	#的数据包会积累一下在传出,可以防止网络拥塞,减少带宽的占用。
    #tcp_nopush     on;

    #keepalive_timeout  0;
	
	##设置保持客户端连接活跃状态的超时时间,单位为秒。
    keepalive_timeout  65;

    #gzip  on;

#==WEB站点配置==#
#在NGINX中我们可以配置多个"server {}",表示多个虚拟主机。则我们可以将每个"server {}"分离到另外一个配置文件中,即一个配置文件对应一个WEB站点。
    server {
	
		#监听端口号
        listen       80;
		
		#可以配置配置域名以及主机名,域名可以进行根据规则匹配,具体自行百度。
        server_name  localhost;

        #charset koi8-r;

		#设置访问日志文件路径,用于记录每个访问请求,“main”调用上面日志格式
        #access_log  logs/host.access.log  main;

		#设置访问位置(URI),即用户访问的URL的尾部部分。当匹配到请求的URI时,则呈现由"{ }"中定义的内容。location指令针对于匹配URI可以嵌入正则表达式,
		#实现一些高级应用,详细用法请参考《HTTP配置高级指令》。
        location / {
		
			#设置WEB应用根目录。为相对于/usr/local/nginx的htnl目录
            root   html;
			
			#设置默认首页文件,当用户访问域名或IP地址是自动索引呈现该文件中的内容,该文件在若为相对路径则会在WEB应用根目录下。
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
		
		#表示访问服务端出错,那么就会跳到50x.html页面,展示该页面的内容
        error_page   500 502 503 504  /50x.html;
		
		#表示访问50x.html页面时,50x.html没有,那么就会去/usr/local/nginx的htnl目录去找到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;
    #    }
    #}

}

一、配置示例

以下是一个简单的Nginx配置文件示例,展示了如何配置一个基本的Web服务器:

user nobody;
worker_processes 1;

error_log logs/error.log;

events {
    worker_connections 1024;
}

http {
    include mime.types;
    default_type application/octet-stream;

    sendfile on;

    server {
        listen 80;
        server_name localhost;

        location / {
            root html;
            index index.html index.htm;
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
            root html;
        }
    }
}

二、配置文件结构

Nginx配置文件主要由三部分组成:全局块、events块和http块。http块中还可以包含多个server块,每个server块中又可以包含多个location块。

  1. 全局块:
    • 配置影响Nginx全局的指令,如运行Nginx服务器的用户(组)、工作进程数、错误日志的位置等。
    • 示例指令:user nobody;worker_processes 1;error_log logs/error.log;
  2. events块:
    • 设定Nginx的工作模式及连接上限,如每个worker进程的最大连接数、是否开启对多worker process下的网络连接进行序列化等。
    • 示例指令:worker_connections 1024;multi_accept on;
  3. http块:
    • 包含HTTP相关的指令,如文件引入、MIME-Type定义、日志自定义、连接超时时间等。
    • 可以嵌套多个server块,用于配置不同的虚拟主机。
    • 示例指令:include mime.types;sendfile on;
  4. server块:
    • 代表一个虚拟主机,可以配置多个,用于支持多个域名或IP地址。
    • 包含server全局块和多个location块。
    • 示例指令:listen 80;server_name localhost;
  5. location块:
    • 配置URL路径的指令,可以定义URL路径的匹配规则和处理方式,如反向代理、重定向等。
    • 示例指令:location / { root html; index index.html index.htm; }

三、重要指令说明

  1. worker_processes:
    • 指定Nginx启动的工作进程数,建议设置为CPU核心数的两倍或设置为auto,由Nginx自行选择。
  2. worker_connections:
    • 定义每个工作进程可以处理的最大连接数,根据服务器性能和并发需求进行适当调整。
  3. listen:
    • 指定Nginx服务器监听的端口,默认是80。
  4. server_name:
    • 指定虚拟主机的域名或IP地址。
  5. location:
    • 用于匹配网页位置,可根据不同的URL路径执行不同的操作,如代理传递、重定向、访问控制等。
  6. proxy_pass:
    • 配置反向代理服务器的目标地址。
  7. rewrite:
    • 配置URL重写规则,可以实现URL的重定向和重写。
  8. proxy_set_header:
    • 修改或添加发送到代理服务器的HTTP请求头,常用于设置HostX-Real-IP、X-Forwarded-For等。

四、配置文件的编辑与生效

  • 编辑配置文件:使用文本编辑器(如vim、nano)编辑Nginx的配置文件,通常位于/etc/nginx/nginx.conf/etc/nginx/sites-available/目录下。
  • 检查配置文件:在修改配置文件后,使用nginx -t命令检查配置文件的语法是否正确。
  • 重启Nginx:如果配置文件无误,使用nginx -s reloadsystemctl restart nginx命令重启Nginx服务,使配置生效。

通过以上步骤,可以完成Nginx配置文件的编辑、检查和生效过程,从而实现对Nginx服务器的灵活配置和管理。