Nginx是一个高性能的HTTP和反向代理服务器,广泛用于Web服务、负载均衡和静态内容服务等场景。以下是一份详细的Nginx配置讲解:
- Nginx配置文件结构
Nginx的主要配置文件通常是 /etc/nginx/nginx.conf。这个文件主要包含以下几个部分:
- 全局块:包括工作模式、运行用户、错误日志路径等全局配置。
- events块:定义处理网络连接的参数,如最大连接数、事件驱动模型等。
- http块:包含与HTTP协议相关的所有配置,可以包含多个 server 块。
- server块:定义虚拟主机的相关配置,可以包含多个 location 块。
- location块:定义URL匹配规则以及对特定请求的处理方式。
- worker_processes auto; # 指定工作进程的数量,默认为自动根据CPU核心数设置
- error_log /var/log/nginx/error.log; # 错误日志路径
- pid /run/nginx.pid; # Nginx主进程的PID文件路径
复制代码
- events块配置
events块用于配置网络连接处理参数:
- events {
- worker_connections 1024; # 每个工作进程的最大连接数
- multi_accept on; # 同时接受多个连接
- }
复制代码
- http块配置
http块是Nginx配置的核心部分,包含以下常见的配置项:
- http {
- include /etc/nginx/mime.types; # 包含MIME类型定义文件
- default_type application/octet-stream; # 默认MIME类型
- 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 /var/log/nginx/access.log main; # 访问日志路径和格式
- sendfile on; # 开启高效文件传输模式
- tcp_nopush on; # 在数据包发送前尽量合并小的数据包
- tcp_nodelay on; # 禁止 Nagle 算法,减少延迟
- keepalive_timeout 65; # 连接保持活跃的时间
- gzip on; # 开启gzip压缩
- gzip_disable "msie6"; # 对IE6不启用gzip压缩
- gzip_vary on;
- gzip_proxied any;
- gzip_comp_level 6;
- gzip_buffers 16 8k;
- gzip_http_version 1.1;
- gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
- include /etc/nginx/conf.d/*.conf; # 包含额外的配置文件
- include /etc/nginx/sites-enabled/*; # 包含虚拟主机配置文件
- }
复制代码
- server块配置
server块用于定义虚拟主机,每个server块可以包含多个location块:
- <pre data-language="nginx" id="9f8f1f53" class="ne-codeblock language-nginx" style="border: 1px solid rgb(232, 232, 232); border-radius: 2px; background: rgb(249, 249, 249); padding: 16px;"><code>server {
- listen 80; # 监听的端口
- server_name example.com www.example.com; # 主机名或域名
- root /var/www/example.com; # 网站根目录
- index index.html index.htm index.php; # 默认首页文件
- access_log /var/log/nginx/example.com.access.log; # 访问日志路径
- error_log /var/log/nginx/example.com.error.log; # 错误日志路径
- location / {
- try_files $uri $uri/ /index.php?$args; # 尝试匹配文件或目录,否则转发到index.php
- }
- location ~ \.php$ {
- include snippets/fastcgi-php.conf; # 包含FastCGI配置片段
- fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; # PHP-FPM监听的socket或IP:port
- }
- location ~ /\.ht {
- deny all; # 禁止访问.htaccess等隐藏文件
- }
- }</code></pre><p id="ucc6680b5" class="ne-p" style="min-height: 24px;"><span class="ne-text"> </span></p><ol start="6" class="ne-ol" style="padding-left: 23px;"><li id="ub319a865" data-lake-index-type="0"><span class="ne-text"> </span><strong>location块配置</strong><span class="ne-text">
- </span><span class="ne-text">location块用于定义URL匹配规则和请求处理方式: </span></li></ol><pre data-language="nginx" id="84d00de6" class="ne-codeblock language-nginx" style="border: 1px solid rgb(232, 232, 232); border-radius: 2px; background: rgb(249, 249, 249); padding: 16px;"><code>location /api {
- proxy_pass http://localhost:8000; # 反向代理到本地的8000端口
- proxy_set_header Host $host;
- proxy_set_header X-Real-IP $remote_addr;
- }
- location /static {
- alias /var/www/static; # 设置静态文件的别名
- expires 30d; # 静态文件缓存有效期为30天
- }</code></pre><p id="u57406d29" class="ne-p" style="min-height: 24px;"></p>
复制代码
以上只是一个基础的Nginx配置示例,实际使用中可能需要根据具体需求进行更多定制化的配置,例如SSL/TLS加密、速率限制、防盗链、重写规则等。在修改配置后,需要使用 nginx -t 命令检查配置文件的语法是否正确,然后使用 sudo systemctl restart nginx 或 sudo service nginx restart 命令重启Nginx以应用新的配置。
|