Nginx 是什么?
Nginx 是一个高性能的 HTTP 和反向代理服务器,同时也是一个 IMAP/POP3/SMTP 代理服务器。它以高并发、低资源消耗和稳定著称,广泛用于 Web 服务器、负载均衡和反向代理等场景。
作用
- 静态资源服务器:可以用来直接提供 HTML、CSS、JS、图片等静态资源。
- 反向代理服务器:Nginx 可以作为前端服务器,将用户请求转发到后端的应用服务器,比如 Node.js、PHP 等。
- 负载均衡:Nginx 可以将请求分发到多个后端服务器,实现负载均衡。
- SSL/TLS 加密:Nginx 支持 HTTPS 加密通信,通过 SSL/TLS 提供安全的连接。
- 缓存加速:可以通过设置缓存,提升静态资源的加载速度。
- 日志记录:可以记录访问日志和错误日志,帮助监控和分析服务器的运行状态。
- 虚拟主机:支持虚拟主机配置,可以在同一台服务器上托管多个域名的网站。
常见配置属性
- server:配置一个虚拟主机,每个
server
指定一个域名或 IP 地址的配置。 - location:用于匹配请求路径,决定处理请求的方式。
- listen:指定 Nginx 监听的端口,默认是 80 端口。
- proxy_pass:指定反向代理的后端地址,将请求转发到该地址。
- root:指定静态文件的根目录路径。
- index:配置默认访问的主页文件,如
index.html
。 - error_page:定义自定义的错误页面。
- gzip:启用 gzip 压缩,减少文件体积,提高传输效率。
- client_max_body_size:设置客户端请求体的最大值,常用于限制上传文件大小。
配置案例
前后端分离项目通常会将前端的静态资源托管在 Nginx 上,而后端服务通过 Nginx 进行反向代理。假设你的前端构建后的文件在 /usr/local/front/myPortal/dist
目录,后端服务是基于 Node.js,运行在 http://localhost:3000
。
配置文件示例
# Nginx 配置文件示例 (nginx.conf)
http {
# 开启服务器实时gzip
gzip on;
# 开启静态gz文件返回, 例如 /dist 文件夹的gz文件,其他的是实时压缩
gzip_static on;
# 启用gzip压缩的最小文件,小于设置值的文件将不会压缩
gzip_min_length 1k;
# 设置压缩所需要的缓冲区大小
gzip_buffers 32 4k;
# 设置gzip压缩针对的HTTP协议版本
gzip_http_version 1.0;
# gzip 压缩级别,1-9,数字越大压缩的越好,也越占用CPU时间
gzip_comp_level 7;
# 进行压缩的文件类型。javascript有多种形式。其中的值可以在 mime.types 文件中找到。
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png application/vnd.ms-fontobject font/ttf font/opentype font/x-woff image/svg+xml;
# 是否在http header中添加Vary: Accept-Encoding,建议开启
gzip_vary on;
# 禁用IE 6 gzip
gzip_disable "MSIE [1-6]\.";
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;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 4096;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include for more information.
include /etc/nginx/conf.d/*.conf;
server {
listen 80;
listen [::]:80;
server_name www.chujiaweicode.top;
return 301 https://$server_name$request_uri;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
error_page 404 /404.html;
location = /40x.html {}
error_page 500 502 503 504 /50x.html;
location = /50x.html {}
}
server {
listen 443 ssl; #修改端口号增加ssl
server_name www.chujiaweicode.top;
# ssl 配置
ssl_certificate /usr/local/nginx/cert/chujiaweicode.top.pem;
ssl_certificate_key /usr/local/nginx/cert/chujiaweicode.top.key;
# 请按照以下协议配置
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# 配置加密套件,写法遵循 openssl 标准
ssl_ciphers ECDHE-RSA-AES256-SHA384:AES256-SHA256:RC4:HIGH:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!AESGCM;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
location / {
root /usr/local/front/myPortal/dist;
index index.html index.htm;
try_files $uri $uri/ /index.html; # 处理前端路由刷新问题
}
location /ai {
alias /usr/local/front/ai/dist;
index index.html index.htm;
try_files $uri $uri/ /index.html; # 处理前端路由刷新问题
}
location /api/ {
proxy_pass http://localhost:3000;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
说明
- 静态资源托管:
root /usr/local/front/myPortal/dist;
定义了静态文件的根目录,前端打包的文件会放在这个目录下。 - 路由处理:使用
try_files
让 Nginx 将所有非静态文件的请求重定向到index.html
,适合 SPA(单页面应用)。 - 反向代理:将
/api/
路径下的所有请求转发到后端的 Node.js 服务上。 - 压缩和缓存:启用了
gzip
压缩,并设置了静态文件的缓存时间以提高性能。 - 错误页面:定义了 404 错误页面,便于定制化用户体验。