Nginx 基础入门
什么是 Nginx
Nginx 是一款高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3 代理服务器。由于其轻量级、高并发和稳定性,Nginx 被广泛应用于各类网站和应用中。笔者在使用 Nginx 时,深刻体会到其配置的灵活性和高效性,特别是在处理静态资源和负载均衡方面表现出色。
安装 Nginx
使用包管理器安装
在 Ubuntu 系统中,可以通过以下命令安装 Nginx:
sudo apt update
sudo apt install nginx
在 CentOS 系统中,安装命令如下:
sudo yum install epel-release
sudo yum install nginx
安装完成后,可以通过以下命令启动 Nginx 服务:
sudo systemctl start nginx
确保 Nginx 开机自启:
sudo systemctl enable nginx
编译源码安装
如果需要自定义 Nginx,可以选择从源码编译安装。首先下载 Nginx 源码包:
wget http://nginx.org/download/nginx-1.25.3.tar.gz
tar -zxvf nginx-1.25.3.tar.gz
cd nginx-1.25.3
配置编译选项:
./configure --prefix=/usr/local/nginx --with-http_ssl_module
编译并安装:
make
sudo make install
安装完成后,可以通过以下命令启动 Nginx:
sudo /usr/local/nginx/sbin/nginx
Nginx 配置基础
Nginx 的配置文件通常位于/etc/nginx/nginx.conf
。笔者建议在修改配置前备份原文件,以防出现问题。
全局配置
全局配置部分包含用户权限、工作进程数等设置。例如:
user www-data;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
HTTP 块
HTTP 块中包含了所有 HTTP 相关的配置,包括 MIME 类型、日志格式、以及包含其他配置文件。
http {
include /etc/nginx/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 /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
include /etc/nginx/conf.d/*.conf;
}
服务器块
服务器块用于定义不同的虚拟主机。以下是一个简单的服务器块示例:
server {
listen 80;
server_name example.com www.example.com;
root /var/www/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
Nginx 作为反向代理
反向代理功能允许 Nginx 将客户端请求转发到后端服务器,如 Node.js 或 Apache。以下是一个配置示例:
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
此配置将api.example.com
的请求转发到本地的 3000 端口。
Nginx 作为静态文件服务器
Nginx 在处理静态文件方面表现优异。以下配置展示了如何配置 Nginx 以提供静态文件服务:
server {
listen 80;
server_name static.example.com;
root /var/www/static;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
将static.example.com
的请求指向/var/www/static
目录,确保静态资源能够快速响应。
常见的 Nginx 命令
以下是一些常用的 Nginx 管理命令:
启动 Nginx:
sudo systemctl start nginx
停止 Nginx:
sudo systemctl stop nginx
重启 Nginx:
sudo systemctl restart nginx
重新加载配置:
sudo systemctl reload nginx
检查配置文件是否有误:
sudo nginx -t
日志管理
Nginx 默认记录访问日志和错误日志。访问日志位于/var/log/nginx/access.log
,错误日志位于/var/log/nginx/error.log
。合理配置日志格式和日志轮转有助于维护和监控。
自定义日志格式
可以在 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/custom_access.log custom;
安全性设置
使用 HTTPS
配置 HTTPS 需要 SSL 证书。以下是一个简单的 HTTPS 服务器块配置:
server {
listen 443 ssl;
server_name secure.example.com;
ssl_certificate /etc/ssl/certs/example.crt;
ssl_certificate_key /etc/ssl/private/example.key;
root /var/www/secure;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
确保 SSL 证书和私钥路径正确,并且文件权限安全。
防止 DDoS 攻击
可以通过限制连接数和请求速率来防止 DDoS 攻击。例如:
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server {
listen 80;
server_name example.com;
location / {
limit_conn addr 10;
limit_req zone=one burst=5;
proxy_pass http://localhost:3000;
}
}
}
此配置限制每个 IP 地址的并发连接数和请求速率。
性能优化
启用 Gzip 压缩
启用 Gzip 可以减少传输数据量,提高加载速度:
http {
gzip on;
gzip_types text/plain application/json application/javascript text/css;
gzip_min_length 256;
}
配置缓存
利用 Nginx 的缓存功能,可以显著提高性能:
http {
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m;
server {
listen 80;
server_name cache.example.com;
location / {
proxy_cache my_cache;
proxy_pass http://backend;
}
}
}
参考链接
注意:在进行配置修改后,务必使用nginx -t
命令检查配置文件的正确性。