Nginx入门 -- Nginx 配置详解

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: Nginx入门 -- Nginx 配置详解

Nginx 是一个高性能的开源 Web 服务器和反向代理服务器,它的配置文件是使用简单而且功能强大的。本文将详细介绍 Nginx 的配置文件结构和各种配置指令,帮助你理解和正确配置 Nginx 服务器。


1. Nginx 配置文件的位置和结构


在大多数 Linux 发行版中,Nginx 的配置文件位于 /etc/nginx 目录下,主要有以下几个文件和目录:

nginx.conf:主配置文件,包含全局的配置指令和引入其他配置文件的指令。

conf.d:配置文件目录,用于存放分散的配置片段,以 .conf 结尾。

sites-available:虚拟主机配置文件目录,用于存放每个虚拟主机的配置文件。

sites-enabled:启用的虚拟主机配置文件目录的符号链接,通过链接到 sites-available 下的配置文件来启用虚拟主机。


Nginx 的配置文件采用了基于块的结构,使用大括号 {} 来表示块的开始和结束。下面是一个简单的 nginx.conf 示例:

worker_processes auto;

events {
    worker_connections 1024;
}

http {
    include mime.types;
    default_type application/octet-stream;
    
    server {
        listen 80;
        server_name example.com;
        root /var/www/html;
        
        location / {
            index index.html;
        }
    }
}



配置文件的结构分为全局块、events 块和 http 块。全局块包含了全局的配置指令,events 块用于配置与连接处理相关的参数,http 块则包含了 HTTP 服务器的配置。


2. 常用的全局配置指令


2.1 worker_processes


worker_processes 指定了 Nginx 启动的 worker 进程数量,一般设置为 auto,表示根据 CPU 核心数量自动分配。


2.2 events


events 块用于配置与连接处理相关的参数,常用的配置指令包括:

worker_connections:指定每个 worker 进程的最大连接数。

multi_accept:启用一次性接受多个连接。


2.3 http


http 块用于配置 HTTP 服务器的相关参数,常用的配置指令包括:

include:引入其他配置文件,可以使用通配符 *。

default_type:设置默认的 MIME 类型。

access_log:指定访问日志文件的路径和格式。

error_log:指定错误日志文件的路径和级别。


3. 虚拟主机配置


Nginx 支持虚拟主机,允许在单个服务器上运行多个网站。每个虚拟主机都有自己的配置文件,存放在 sites-available 目录下,并通过符号链接启用。

下面是一个虚拟主机配置的示例:

server {
    listen 80;
    server_name example.com;
    root /var/www/example;
    
    location / {
        index index.html;
    }
    
    location /images/ {
        alias /var/www/images/;
    }
    
    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }
}


在虚拟主机配置中,常用的指令包括:

listen:指定监听的端口和 IP 地址。

server_name:指定虚拟主机的域名。

root:指定网站的根目录。

location:用于匹配 URL,并指定相应的处理规则。


4. URL 匹配和重定向


Nginx 的 URL 匹配功能非常强大,可以根据不同的 URL 进行不同的处理。下面是一些常见的 URL 匹配和重定向配置示例:

location / {
    index index.html;
}

location /blog/ {
    alias /var/www/blog/;
}

location ~ ^/user/(\d+)/profile$ {
    rewrite ^/user/(\d+)/profile$ /profile.php?id=$1 last;
}

location = /about {
    return 301 /about-us;
}

location ~* \.(jpg|jpeg|png|gif)$ {
    expires 1d;
}


在上面的示例中,我们使用了不同的 location 指令来匹配不同的 URL,并指定相应的处理规则。其中:


location / 匹配根路径,指定了默认的索引文件为 index.html。

location /blog/ 匹配以 /blog/ 开头的 URL,使用 alias 指令指定了对应的文件目录。

location ~ ^/user/(\d+)/profile$ 使用正则表达式匹配类似 /user/123/profile 的 URL,并使用 rewrite 指令将 URL 重定向到 /profile.php?id=$1。

location = /about 匹配完全相等的 URL /about,并使用 return 指令将请求重定向到 /about-us。

location ~* \.(jpg|jpeg|png|gif)$ 使用正则表达式匹配以 .jpg、.jpeg、.png 或 .gif 结尾的 URL,并使用 expires 指令设置缓存过期时间。


5. 反向代理和负载均衡


Nginx 作为反向代理服务器,可以将请求转发给后端服务器,并支持负载均衡。下面是一个反向代理和负载均衡的配置示例:

http {
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
    }
    
    server {
        listen 80;
        server_name example.com;
        
        location / {
            proxy_pass http://backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
}


在上面的示例中,我们使用 upstream 指令定义了后端服务器的列表。在 server 块中,使用 proxy_pass 指令将请求转发给后端服务器,并使用 proxy_set_header 指令设置请求头。


6. HTTPS 配置


Nginx 支持 HTTPS,可以通过配置 SSL 证书来启用加密连接。下面是一个简单的 HTTPS 配置示例:

server {
    listen 443 ssl;
    server_name example.com;
    
    ssl_certificate /path/to/certificate.crt;
    ssl_certificate_key /path/to/private.key;
    
    location / {
        root /var/www/html;
        index index.html;
    }
}


在上面的示例中,我们使用 listen 指令指定了监听的端口为 443,并使用 ssl 参数启用 SSL。使用 ssl_certificate 和 ssl_certificate_key 指令指定了 SSL 证书和私钥的路径。


7. 配置文件的测试和重载


在修改 Nginx 配置文件后,可以使用以下命令进行测试和重载配置:

nginx -t:测试配置文件的语法是否正确。

nginx -s reload:重载配置文件,不中断正在处理的连接。


8. 动态模块和静态模块


Nginx 支持动态模块和静态模块的加载。静态模块是在编译时与 Nginx 一起构建的,而动态模块是在运行时加载的。可以通过以下方式来加载模块:

静态模块:在编译 Nginx 时,使用 --with 参数指定需要包含的模块。

动态模块:在 nginx.conf 中使用 load_module 指令加载模块。


例如,要加载 ngx_http_geoip_module 模块,可以在 http 块中添加以下配置:

load_module modules/ngx_http_geoip_module.so;


9. Gzip 压缩


Nginx 支持使用 Gzip 压缩来减小传输的数据量,提高性能。可以使用以下配置来启用 Gzip 压缩:

http {
    gzip on;
    gzip_types text/plain text/css application/json;
}


在上面的示例中,gzip on; 启用了 Gzip 压缩功能,gzip_types 指定了需要进行压缩的 MIME 类型。


10. 缓存


Nginx 可以通过缓存来提高响应速度和减轻后端服务器的负载。可以使用以下配置来启用缓存:

http {
    proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m;
   
    server {
        location / {
            proxy_cache my_cache;
            proxy_cache_valid 200 304 10m;
            proxy_cache_valid any 1m;
            proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
        }
    }
}



在上面的示例中,proxy_cache_path 指定了缓存路径和容量,proxy_cache 启用了缓存,proxy_cache_valid 设置了缓存的有效期,proxy_cache_use_stale 指定了在后端服务器不可用时使用过期的缓存。


11. 日志记录


Nginx 提供了灵活的日志记录功能,可以记录访问日志、错误日志和其他自定义日志。以下是一些常见的日志记录配置示例:

http {
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;
    
    server {
        access_log /var/log/nginx/example.access.log;
        error_log /var/log/nginx/example.error.log;
        
        location / {
            log_format custom_format '$remote_addr - $remote_user [$time_local] '
                '"$request" $status $body_bytes_sent '
                '"$http_referer" "$http_user_agent"';
                
            access_log /var/log/nginx/example.custom.log custom_format;
        }
    }
}



在上面的示例中,使用 access_log 和 error_log 指令分别设置了默认的访问日志和错误日志路径。在特定的 server 块中,可以使用不同的日志路径和自定义日志格式。


12. 安全性配置


Nginx 提供了一些安全性配置指令,以增强服务器的安全性。以下是一些常见的安全性配置示例:

http {
    server_tokens off;
    add_header X-Content-Type-Options nosniff;
    add_header X-Frame-Options SAMEORIGIN;
    add_header X-XSS-Protection "1; mode=block";
   
    server {
        location / {
            deny 192.168.1.1;
            allow 192.168.1.0/24;
            auth_basic "Restricted Content";
            auth_basic_user_file /path/to/.htpasswd;
        }
    }
}



在上面的示例中,server_tokens off; 禁用了服务器版本号的显示,add_header 指令添加了一些常见的安全性响应头。在特定的 location 块中,使用 deny 和 allow指令可以限制访问的 IP 地址范围,auth_basic 和 auth_basic_user_file 配置了基本身份验证。


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
23天前
|
应用服务中间件 BI nginx
Nginx的location配置详解
【10月更文挑战第16天】Nginx的location配置详解
|
30天前
|
缓存 负载均衡 安全
Nginx常用基本配置总结:从入门到实战的全方位指南
Nginx常用基本配置总结:从入门到实战的全方位指南
247 0
|
3天前
|
存储 负载均衡 中间件
Nginx反向代理配置详解,图文全面总结,建议收藏
Nginx 是大型架构必备中间件,也是大厂喜欢考察的内容,必知必会。本篇全面详解 Nginx 反向代理及配置,建议收藏。
Nginx反向代理配置详解,图文全面总结,建议收藏
|
15天前
|
应用服务中间件 API nginx
nginx配置反向代理404问题
【10月更文挑战第18天】本文介绍了使用Nginx进行反向代理的配置方法,解决了404错误、跨域问题和302重定向问题。关键配置包括代理路径、请求头设置、跨域头添加以及端口转发设置。通过调整`proxy_set_header`和添加必要的HTTP头,实现了稳定的服务代理和跨域访问。
nginx配置反向代理404问题
|
10天前
|
应用服务中间件 网络安全 PHP
八个免费开源 Nginx 管理系统,轻松管理 Nginx 站点配置
Nginx 是一个高效的 HTTP 服务器和反向代理,擅长处理静态资源、负载均衡和网关代理等任务。其配置主要通过 `nginx.conf` 文件完成,但复杂设置可能导致错误。本文介绍了几个开源的 Nginx 可视化配置系统,如 Nginx UI、VeryNginx、OpenPanel、Ajenti、Schenkd nginx-ui、EasyEngine、CapRover 和 NGINX Agent,帮助简化和安全地管理 Nginx 实例。
|
20天前
|
缓存 负载均衡 应用服务中间件
Nginx配置
【10月更文挑战第22天】在实际配置 Nginx 时,需要根据具体的需求和环境进行调整和优化。同时,还需要注意配置文件的语法正确性和安全性。
35 7
|
29天前
|
前端开发 JavaScript 应用服务中间件
终极 Nginx 配置指南
本文介绍了Nginx的基本配置及其优化方法。首先,通过删除注释简化了Nginx的默认配置文件,使其更易于理解。接着,文章将Nginx配置文件分为全局块、events块和http块三部分进行详细解释。此外,还提供了如何快速上线网站、解决前端history模式404问题、配置反向代理、开启gzip压缩、设置维护页面、在同一IP上部署多个网站以及实现动静分离的具体配置示例。最后,附上了Nginx的基础命令,包括安装、启动、重启和关闭等操作。
|
1月前
|
缓存 前端开发 JavaScript
一、nginx配置
一、nginx配置
152 1
|
30天前
|
JavaScript 前端开发 应用服务中间件
vue前端开发中,通过vue.config.js配置和nginx配置,实现多个入口文件的实现方法
vue前端开发中,通过vue.config.js配置和nginx配置,实现多个入口文件的实现方法
137 0
|
1月前
|
缓存 监控 负载均衡
nginx相关配置及高并发优化
Nginx的高并发优化是一个综合性的过程,需要根据具体的业务场景和硬件资源量身定制。以上配置只是基础,实际应用中还需根据服务器监控数据进行持续调整和优化。例如,利用工具如ab(Apache Benchmarks)进行压力测试,监控CPU、内存、网络和磁盘I/O等资源使用情况,确保配置的有效性和服务的稳定性。
107 0