nginx服务器及其主要特性,首先给出了包管理器安装及编译安装两种方式,然后重点对 nginx 配置文件中的指令及参数进行详细说明,在了解 nginx 的工作方式后,从 nginx 实现请求访问控制 (IP、带宽、连接数限制及参数校验)、反向代理、跨域请求、负载均衡策略 (轮询、权重、IP 哈希、最少连接数)、缓存方式及配置SSL证书提供Https访问方面进行详细说明。Nginx 简介
engine x)是一个高性能的 HTTP 和反向代理服务器、IMAP/POP3代理服务器、邮件代理服务器和通用的TCP/UDP代理服务器,最初由俄罗斯工程师伊戈尔・西索耶夫(Igor Sysoev)用 C 语言开发,2004 年公开发布,2011 年成立 nginx 公司,提供相应支持及其付费软件 nginx plus。nginx 主要特性
- 高并发连接处理能力:事件驱动和非阻塞 I/O,内存占用低,支持多进程,可处理数万至数十万并发连接。
- 高效率处理静态网页:通过文件缓存、内存读取,快速响应图像、CSS、HTML 等静态内容。
- 强大的反向代理:接收客户端请求,转发至后端服务器并返回结果,客户端无感知,可缓存请求。
- 多种负载均衡策略:支持轮询、权重、IP 哈希、最少连接数等算法,合理分配后端集群流量。
- 请求过滤和正则匹配:支持 gzip 压缩、字节限制、图像转换;支持请求路径正则匹配。
- 灵活的访问控制:校验客户端 IP、限制连接数与速率、记录访问日志。
- SSL/TLS 协议支持:保障通信加密安全;HTTPS 基于 SSL/TLS 加密传输,防窃取与篡改。
通过包管理器安装 nginx
apt/apt-get安装,简便快捷,但版本可能滞后、自定义有限。# 安装nginx
sudo apt install nginx
# 启动/查看状态/重新加载配置
systemctl start nginx
systemctl status nginx
systemctl reload nginx
# 查看版本
nginx -v
查看 nginx 信息
# 查看已安装nginx包
apt list --installed | grep nginx
# 查看路径
whereis nginx
which nginx
# 查看系统环境变量
cat /etc/environment
/etc/nginx/nginx.conf编译安装 nginx
官方下载:nginx: download
以
nginx-1.26.1在 Ubuntu 20 编译安装为例:1. 下载并解压
tar -vxf nginx-1.26.1.tar.gz
cd nginx-1.26.1 && ls
2. 安装依赖
sudo apt-get install libpcre3 libpcre3-dev
sudo apt-get install zlib1g zlib1g-dev
sudo apt-get install libssl-dev
3. 配置 nginx
sudo ./configure
sudo ./configure \
--sbin-path=/usr/local/nginx/nginx \
--conf-path=/usr/local/nginx/nginx.conf \
--pid-path=/usr/local/nginx/nginx.pid \
--with-http_ssl_module
4. 编译与安装
sudo make
sudo make install
5. 启动 nginx
sudo /usr/local/nginx/nginx
curl localhost
Nginx 管理命令
nginx -s stop # 快速关闭
nginx -s quit # 优雅关闭(处理完请求)
nginx -s reload # 重新加载配置
ps -ax | grep nginx # 查看进程
sudo kill -s quit <主进程ID> # 关闭
nginx 配置文件
#为注释。典型 nginx.conf 结构
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 TLSv1.3;
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
请求访问控制
IP 限制
location /admin {
allow 192.168.58.0/24;
deny all;
}
路径重写与参数校验
location /protected {
if ($arg_token != "123") {
return 403;
}
rewrite ^/protected/1$ /protected/index.html last;
}
请求限流
limit_req_zone binary_remote_addr zone=resource_one:10m rate=1r/s;
limit_conn_zone binary_remote_addr zone=resource_addr:10m;
server {
listen 8000;
server_name localhost;
location /resources {
limit_rate 10k;
limit_req zone=resource_one burst=5 nodelay;
limit_conn resource_addr 1;
root /var/www;
index index.html;
}
}
反向代理
location /api {
proxy_pass http://192.168.58.59:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
跨域请求配置
server {
listen 8000;
server_name localhost;
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Credentials true;
add_header Access-Control-Allow-Methods "GET,POST,PUT,DELETE,OPTIONS";
add_header Access-Control-Allow-Headers "Origin,X-Requested-With,Content-Type,Accept";
location /resources {
root /var/www;
index index.html;
}
}
负载均衡策略
upstream backend {
server 192.168.58.59:8080;
server 192.168.58.60:8080;
# 轮询(默认)
# 权重:server ... weight=2;
# IP哈希:ip_hash;
# 最少连接:least_conn;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
反向代理缓存
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=app_cache:10m max_size=1g inactive=30m use_temp_path=off;
server {
listen 8000;
location /api {
proxy_cache app_cache;
proxy_cache_valid 200 302 304 15m;
proxy_cache_valid 404 1m;
proxy_pass http://192.168.58.59:8080;
}
}
配置 SSL 证书支持 HTTPS
1. 生成自签名证书(测试用)
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/private/nginx-selfsigned.key \
-out /etc/ssl/certs/nginx-selfsigned.crt
2. HTTPS 配置
server {
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
server_name devp.com www.devp.com;
ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
ssl_session_timeout 5m;
ssl_session_cache shared:SSL:10m;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
root /var/www/html;
index index.html;
}
}
3. 验证
nginx -t
nginx -s reload
curl -k https://devp.com
参考资料
原创文章,作者:余初云,如若转载,请注明出处:https://blog.jidcy.com/jsjc/2631.html
