跳到主要内容

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命令检查配置文件的正确性。