Nginx配置文件详解
Nginx(engine x)是一个轻量级的开源Web服务器软件,也可用作反向代理、负载均衡器和HTTP缓存。它的特点是占用资源少,能够处理更多的并发连接,具有高扩展性和高可靠性,因此被越来越多的大型网站所使用。Nginx采用事件驱动、异步非阻塞的方式来处理客户端的请求,支持HTTP、HTTPS、SMTP、POP3、IMAP等协议。同时,Nginx还集成了许多常用的功能,例如:反向代理、负载均衡、
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;
}
}
}
更多推荐
所有评论(0)