一、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 层下可以有 Event、HTTP 层;
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块。
- 全局块:
- 配置影响Nginx全局的指令,如运行Nginx服务器的用户(组)、工作进程数、错误日志的位置等。
- 示例指令:
user nobody;、worker_processes 1;、error_log logs/error.log;
- events块:
- 设定Nginx的工作模式及连接上限,如每个worker进程的最大连接数、是否开启对多worker process下的网络连接进行序列化等。
- 示例指令:
worker_connections 1024;、multi_accept on;
- http块:
- 包含HTTP相关的指令,如文件引入、MIME-Type定义、日志自定义、连接超时时间等。
- 可以嵌套多个server块,用于配置不同的虚拟主机。
- 示例指令:
include mime.types;、sendfile on;
- server块:
- 代表一个虚拟主机,可以配置多个,用于支持多个域名或IP地址。
- 包含server全局块和多个location块。
- 示例指令:
listen 80;、server_name localhost;
- location块:
- 配置URL路径的指令,可以定义URL路径的匹配规则和处理方式,如反向代理、重定向等。
- 示例指令:
location / { root html; index index.html index.htm; }
三、重要指令说明
- worker_processes:
- 指定
Nginx启动的工作进程数,建议设置为CPU核心数的两倍或设置为auto,由Nginx自行选择。
- 指定
- worker_connections:
- 定义每个工作进程可以处理的最大连接数,根据服务器性能和并发需求进行适当调整。
- listen:
- 指定
Nginx服务器监听的端口,默认是80。
- 指定
- server_name:
- 指定虚拟主机的域名或
IP地址。
- 指定虚拟主机的域名或
- location:
- 用于匹配网页位置,可根据不同的
URL路径执行不同的操作,如代理传递、重定向、访问控制等。
- 用于匹配网页位置,可根据不同的
- proxy_pass:
- 配置反向代理服务器的目标地址。
- rewrite:
- 配置
URL重写规则,可以实现URL的重定向和重写。
- 配置
- proxy_set_header:
- 修改或添加发送到代理服务器的
HTTP请求头,常用于设置Host、X-Real-IP、X-Forwarded-For等。
- 修改或添加发送到代理服务器的
四、配置文件的编辑与生效
- 编辑配置文件:使用文本编辑器(如vim、nano)编辑Nginx的配置文件,通常位于
/etc/nginx/nginx.conf或/etc/nginx/sites-available/目录下。 - 检查配置文件:在修改配置文件后,使用
nginx -t命令检查配置文件的语法是否正确。 - 重启
Nginx:如果配置文件无误,使用nginx -s reload或systemctl restart nginx命令重启Nginx服务,使配置生效。
通过以上步骤,可以完成Nginx配置文件的编辑、检查和生效过程,从而实现对Nginx服务器的灵活配置和管理。