1. Mac 下 Nginx 的安装与基础配置在 macOS 上使用 Homebrew 安装 Nginx 是最便捷的方式。Homebrew 是 macOS 上最受欢迎的包管理器能够简化软件的安装和管理过程。安装前请确保你的系统已安装 Xcode 命令行工具这是编译软件的基础环境。安装 Nginx 只需在终端执行以下命令brew install nginx安装完成后Nginx 的主要文件会分布在以下几个关键目录中配置文件目录/opt/homebrew/etc/nginx日志文件目录/opt/homebrew/var/log/nginx默认网站根目录/opt/homebrew/var/www提示如果你使用的是 Intel 芯片的 Mac路径可能会是/usr/local/etc/nginx而不是/opt/homebrew/etc/nginx这是 Homebrew 在 M1/M2 芯片和 Intel 芯片上的路径差异。2. Nginx 服务管理2.1 启动与停止服务使用 Homebrew 管理 Nginx 服务是最推荐的方式它能够确保服务在系统启动时自动运行并提供统一的管理接口# 启动 Nginx brew services start nginx # 停止 Nginx brew services stop nginx # 重启 Nginx brew services restart nginx如果你想临时运行 Nginx 而不设置为开机启动可以直接使用nginx要停止这种临时运行的 Nginx 进程可以使用nginx -s stop2.2 检查 Nginx 运行状态要确认 Nginx 是否正在运行可以使用以下命令检查进程ps -ef | grep nginx正常情况下你应该能看到至少两个 Nginx 进程一个 master 进程和一个 worker 进程。master 进程以 root 身份运行如果你使用了 sudoworker 进程则以普通用户身份运行。3. Nginx 配置管理3.1 配置文件结构Nginx 的主配置文件位于/opt/homebrew/etc/nginx/nginx.conf。这个文件通常包含全局配置并通过include指令引入其他配置文件。典型的 Nginx 配置文件结构如下/opt/homebrew/etc/nginx/ ├── nginx.conf # 主配置文件 ├── servers/ # 虚拟主机配置目录 │ └── default.conf # 默认服务器配置 ├── mime.types # MIME 类型定义 └── ...3.2 修改配置后的操作每次修改 Nginx 配置后都需要重新加载配置才能使更改生效sudo nginx -s reload这个命令会优雅地重新加载配置不会中断正在处理的连接。如果配置有语法错误Nginx 会拒绝重新加载并保持原有配置运行。3.3 测试配置文件在重新加载配置前建议先测试配置文件是否有语法错误nginx -t这个命令会检查配置文件语法并报告任何错误包括错误所在的行号非常有助于快速定位问题。4. 日志文件管理4.1 日志文件位置Nginx 默认生成两种日志访问日志/opt/homebrew/var/log/nginx/access.log错误日志/opt/homebrew/var/log/nginx/error.log你可以在 Nginx 配置文件中修改这些路径。例如要为某个虚拟主机设置独立的日志文件server { listen 80; server_name example.com; access_log /var/log/nginx/example.com.access.log; error_log /var/log/nginx/example.com.error.log; ... }4.2 日志轮转随着时间推移日志文件会变得很大。建议设置日志轮转来管理日志文件大小。在 macOS 上可以使用newsyslog工具或者直接在 Nginx 配置中使用logrotate。一个简单的logrotate配置示例/etc/logrotate.d/nginx/opt/homebrew/var/log/nginx/*.log { daily missingok rotate 14 compress delaycompress notifempty create 0640 admin admin sharedscripts postrotate [ -f /opt/homebrew/var/run/nginx.pid ] kill -USR1 cat /opt/homebrew/var/run/nginx.pid endscript }5. 常用操作技巧5.1 使用 Vim 编辑配置文件编辑 Nginx 配置文件时一些 Vim 技巧能提高效率# 显示行号 :set number # 删除当前行 dd # 搜索关键词 /keyword # 保存文件 :w # 退出 :q5.2 自定义错误页面你可以为不同的 HTTP 状态码创建自定义错误页面。首先创建 HTML 错误页面文件然后在 Nginx 配置中添加error_page 404 /404.html; error_page 500 502 503 504 /50x.html;5.3 启用目录列表有时你可能需要列出目录中的文件仅限开发环境location /downloads/ { autoindex on; }6. 性能调优基础6.1 Worker 进程配置在nginx.conf中你可以调整 worker 进程数量以匹配你的 CPU 核心数worker_processes auto; # 自动检测 CPU 核心数 events { worker_connections 1024; # 每个 worker 的最大连接数 }6.2 启用 Gzip 压缩减少传输数据量可以显著提高性能gzip on; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xmlrss text/javascript; gzip_min_length 1000; gzip_proxied any;6.3 静态文件缓存为静态资源设置缓存头可以减少重复请求location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { expires 30d; add_header Cache-Control public, no-transform; }7. 常见问题排查7.1 端口已被占用如果启动 Nginx 时遇到端口冲突错误可以检查哪个进程占用了端口sudo lsof -i :80然后你可以停止占用进程或者修改 Nginx 的监听端口。7.2 权限问题Nginx 需要读取网站文件和写入日志的权限。确保 Nginx worker 进程用户通常在nginx.conf中设置为user指令有适当的权限sudo chown -R admin:staff /opt/homebrew/var/www sudo chmod -R 755 /opt/homebrew/var/www7.3 配置错误如果 Nginx 无法启动或重新加载首先检查错误日志tail -f /opt/homebrew/var/log/nginx/error.log然后使用测试命令检查配置nginx -t8. 安全最佳实践8.1 隐藏 Nginx 版本信息在 HTTP 头中隐藏 Nginx 版本可以增加安全性server_tokens off;8.2 限制 HTTP 方法只允许必要的 HTTP 方法limit_except GET POST { deny all; }8.3 防止点击劫持添加 X-Frame-Options 头add_header X-Frame-Options SAMEORIGIN;8.4 内容安全策略设置基本的内容安全策略add_header Content-Security-Policy default-src self; script-src self unsafe-inline cdn.example.com;;9. 虚拟主机配置9.1 基本虚拟主机配置一个简单的虚拟主机server { listen 80; server_name example.com www.example.com; root /opt/homebrew/var/www/example.com; index index.html index.htm; location / { try_files $uri $uri/ 404; } }9.2 HTTPS 配置使用 Lets Encrypt 免费 SSL 证书server { listen 443 ssl; server_name example.com www.example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # 其他 SSL 优化配置... }9.3 重定向 HTTP 到 HTTPSserver { listen 80; server_name example.com www.example.com; return 301 https://$host$request_uri; }10. 高级功能10.1 反向代理配置将请求代理到后端应用服务器location /api/ { proxy_pass http://localhost:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }10.2 负载均衡简单的负载均衡配置upstream backend { server backend1.example.com; server backend2.example.com; } server { location / { proxy_pass http://backend; } }10.3 WebSocket 支持代理 WebSocket 连接location /ws/ { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; }11. 维护与监控11.1 状态页面启用 Nginx 状态页面以监控服务器状态location /nginx_status { stub_status on; access_log off; allow 127.0.0.1; deny all; }访问http://localhost/nginx_status将显示类似如下的信息Active connections: 1 server accepts handled requests 10 10 20 Reading: 0 Writing: 1 Waiting: 011.2 定期维护建议定期执行以下维护任务检查并清理旧日志文件更新 Nginx 到最新稳定版本审查配置文件中的安全设置监控服务器资源使用情况11.3 备份策略重要的 Nginx 配置文件应该定期备份。一个简单的备份脚本#!/bin/bash BACKUP_DIR/path/to/backup/nginx mkdir -p $BACKUP_DIR cp -r /opt/homebrew/etc/nginx $BACKUP_DIR/nginx_$(date %Y%m%d) find $BACKUP_DIR -type d -mtime 30 -exec rm -rf {} \;12. 性能监控与优化12.1 监控活动连接使用netstat监控当前连接netstat -an | grep :80 | wc -l12.2 压力测试使用ab(Apache Benchmark) 进行简单压力测试ab -n 1000 -c 100 http://localhost/12.3 优化 Keepalive调整 keepalive 设置可以减少连接建立开销keepalive_timeout 65; keepalive_requests 100;13. 常见使用场景13.1 单页应用配置为 Vue/React/Angular 等单页应用配置location / { try_files $uri $uri/ /index.html; }13.2 文件下载服务器配置大文件下载优化location /downloads/ { sendfile on; tcp_nopush on; aio on; directio 4m; }13.3 图片处理服务器使用 Nginx 图像过滤器模块location ~* ^/resize/(.*)\.(jpg|png|gif)$ { image_filter resize 800 600; image_filter_jpeg_quality 85; image_filter_buffer 10M; }14. 故障排除指南14.1 502 Bad Gateway可能原因和解决方案后端服务未运行 - 启动后端服务代理配置错误 - 检查proxy_passURL权限问题 - 检查后端服务的访问权限14.2 403 Forbidden常见原因文件权限不正确目录索引被禁用但未指定索引文件访问被限制规则阻止14.3 404 Not Found检查root指令设置是否正确文件是否确实存在于指定路径try_files指令配置15. 实用脚本集合15.1 快速重启脚本创建restart_nginx.sh#!/bin/bash sudo nginx -t sudo nginx -s reload15.2 日志分析脚本分析访问日志中最频繁的请求awk {print $7} /opt/homebrew/var/log/nginx/access.log | sort | uniq -c | sort -nr | head -2015.3 监控错误日志实时监控错误日志tail -f /opt/homebrew/var/log/nginx/error.log | grep -i error16. 进阶学习资源要深入学习 Nginx建议参考以下资源官方文档https://nginx.org/en/docs/Nginx 配置生成器https://www.digitalocean.com/community/tools/nginxNginx 性能调优指南Nginx Cookbook by OReilly在实际工作中Nginx 的配置会根据具体需求有很大变化。建议从简单配置开始逐步添加功能并始终在修改前备份配置文件。定期检查错误日志可以帮助及早发现问题。对于生产环境应该进行充分的测试和性能评估。
阅读完成 · 觉得有帮助?