🌈个人主页:前端青山
🔥系列专栏:Nginx篇
🔖人终将被年少不可得之物困其一生
依旧青山,本期给大家带来Nginx篇专栏内容:Nginx-使用指南
前言
大家好,我是青山。Nginx 是一个高性能的 HTTP 和反向代理服务器,广泛应用于各种 Web 应用和服务中。本文将详细介绍 Nginx 的安装、启动、配置、常用命令、高级功能以及常见问题解决方法,帮助你更好地理解和使用 Nginx。
1. 安装 Nginx
1.1 在 Ubuntu 上安装
sudo apt update sudo apt install nginx
1.2 在 CentOS 上安装
sudo yum install epel-release sudo yum install nginx
1.3 在 Debian 上安装
sudo apt update sudo apt install nginx
1.4 在 macOS 上安装
使用 Homebrew 安装 Nginx:
brew install nginx
2. 启动、停止和重启 Nginx
2.1 启动 Nginx
sudo systemctl start nginx
2.2 停止 Nginx
sudo systemctl reload nginx
sudo systemctl stop nginx
2.3 重启 Nginx
sudo systemctl restart nginx
2.4 重新加载配置文件
2.5 检查 Nginx 状态
sudo systemctl status nginx
3. 配置 Nginx
3.1 配置文件位置
Nginx 的主配置文件通常位于
/etc/nginx/nginx.conf
。每个虚拟主机的配置文件通常位于
/etc/nginx/sites-available/
目录下,并通过符号链接链接到
/etc/nginx/sites-enabled/
目录。
3.2 主配置文件结构
user www-data; worker_processes auto; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf; events { worker_connections 768; } http { sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE ssl_prefer_server_ciphers on; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; gzip on; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; }
3.3 虚拟主机配置示例
以下是一个简单的 Nginx 虚拟主机配置示例:
server { listen 80; server_name example.com; root /var/www/example.com; index index.html index.htm; location / { try_files $uri $uri/ =404; } 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; proxy_set_header X-Forwarded-Proto $scheme; } }
3.4 解释
listen 80;
:监听 80 端口。server_name example.com;
:指定服务器名称。root /var/www/example.com;
:指定网站根目录。index index.html index.htm;
:指定默认索引文件。location / { ... }
:处理根路径的请求。location /api/ { ... }
:处理/api/
路径的请求,并将其代理到本地的 3000 端口。
4. 常用命令
4.1 检查配置文件语法
sudo nginx -t
4.2 查看 Nginx 版本
nginx -v
4.3 查看 Nginx 进程
ps aux | grep nginx
4.4 查看 Nginx 日志
Nginx 的访问日志和错误日志通常位于
/var/log/nginx/
目录下。
- 访问日志:
/var/log/nginx/access.log
- 错误日志:
/var/log/nginx/error.log
4.5 查看 Nginx 配置文件路径
nginx -T
4.6 查看 Nginx 当前运行状态
sudo systemctl status nginx
5. 高级功能
5.1 开启 Gzip 压缩
在
http
或
server
块中添加以下配置:
gzip on; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
5.2 设置缓存
在
location
块中添加以下配置:
location /static/ { alias /var/www/example.com/static/; expires 30d; }
5.3 配置 SSL
安装 Let's Encrypt 并配置 SSL:
sudo apt install certbot python3-certbot-nginx sudo certbot --nginx -d example.com
5.4 配置负载均衡
Nginx 可以用于负载均衡,以下是一个简单的负载均衡配置示例:
upstream backend { server backend1.example.com; server backend2.example.com; server backend3.example.com; } server { listen 80; server_name example.com; location / { proxy_pass http://backend; } }
5.5 配置反向代理
Nginx 可以作为反向代理服务器,以下是一个简单的反向代理配置示例:
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; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
5.6 配置限流
Nginx 可以限制客户端的请求速率,以下是一个简单的限流配置示例:
http { limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; server { listen 80; server_name example.com; location / { limit_req zone=one burst=5 nodelay; proxy_pass http://backend; } } }
5.7 配置访问控制
Nginx 可以限制特定 IP 地址的访问,以下是一个简单的访问控制配置示例:
server { listen 80; server_name example.com; allow 192.168.1.0/24; deny all; location / { proxy_pass http://backend; } }
5.8 配置重定向
Nginx 可以进行 URL 重定向,以下是一个简单的重定向配置示例:
server { listen 80; server_name old.example.com; return 301 http://new.example.com$request_uri; }
5.9 配置缓存清理
Nginx 可以配置缓存清理,以下是一个简单的缓存清理配置示例:
http { proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m; proxy_cache_key "$scheme$request_method$host$request_uri"; server { listen 80; server_name example.com; location / { proxy_pass http://backend; proxy_cache my_cache; proxy_cache_bypass $http_purge; proxy_cache_valid 200 301 302 10m; proxy_cache_valid 404 1m; add_header X-Proxy-Cache $upstream_cache_status; } location ~ /purge(/.*) { allow 192.168.1.0/24; deny all; proxy_cache_purge my_cache "$scheme$request_method$host$1"; } } }
5.10 配置日志格式
Nginx 可以自定义日志格式,以下是一个简单的日志格式配置示例:
http { log_format custom '$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 custom; server { listen 80; server_name example.com; location / { proxy_pass http://backend; } } }
6. 常见问题及解决方法
6.1 Nginx 无法启动
检查 Nginx 配置文件是否有语法错误:
sudo nginx -t
6.2 Nginx 无法绑定端口
确保没有其他服务占用该端口:
sudo netstat -tuln | grep 80
6.3 Nginx 无法访问静态文件
检查文件权限和路径是否正确:
ls -l /var/www/example.com
6.4 Nginx 代理请求失败
检查后端服务是否正常运行:
curl http://localhost:3000
6.5 Nginx 日志文件过大
定期清理日志文件:
sudo truncate -s 0 /var/log/nginx/access.log sudo truncate -s 0 /var/log/nginx/error.log
6.6 Nginx 无法解析域名
检查 DNS 配置:
nslookup example.com
6.7 Nginx 无法处理大文件上传
调整 Nginx 配置以支持大文件上传:
http { client_max_body_size 100M; }
6.8 Nginx 无法处理 HTTPS 请求
确保 SSL 证书和密钥文件路径正确:
server { listen 443 ssl; server_name example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; }
6.9 Nginx 无法处理 WebSocket 请求
配置 Nginx 以支持 WebSocket:
location /ws/ { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; }
6.10 Nginx 无法处理高并发请求
调整 Nginx 工作进程数和连接数:
worker_processes auto; events { worker_connections 1024; }
总结
Nginx 是一个功能强大的 Web 服务器和反向代理服务器,适用于多种应用场景。通过本文的详细介绍,希望你能对 Nginx 的安装、配置、常用命令、高级功能以及常见问题解决方法有一个全面的了解。如果你有任何问题或建议,欢迎留言交流。祝你在使用 Nginx 的过程中一切顺利!
---青山
版权归原作者 前端青山 所有, 如有侵权,请联系我们删除。