前言
Nginx 是一款轻量级且高性能的 HTTP 服务器和反向代理服务器,它在处理静态资源、负载均衡、反向代理等方面表现出色,非常适合作为前端项目的服务器。作为一名前端开发者,了解和掌握 Nginx 的基本配置和优化技巧是非常有必要的。
Nginx 基本概念
什么是 Nginx?
Nginx 是一个高性能的 HTTP 和反向代理服务器,它以占用内存少、并发能力强而闻名。Nginx 专为性能优化而设计,能够承受高负载,支持高达数万个并发连接。
正向代理与反向代理
- 正向代理:客户端通过代理服务器访问目标服务器,目标服务器不知道实际的客户端身份。
- 反向代理:客户端直接与代理服务器通信,代理服务器再将请求转发给目标服务器,目标服务器认为请求来自代理服务器。
Nginx 安装与配置
安装 Nginx
在 Linux 系统中,可以通过包管理器安装 Nginx。例如,在 CentOS 上可以使用以下命令:
sudo yum install nginx
基本配置文件结构
Nginx 的配置文件通常位于 /etc/nginx/nginx.conf
,其基本结构包括全局块、events 块、http 块、server 块和 location 块。
- 全局块:配置影响 Nginx 服务器整体运行的指令,如工作进程数。
- events 块:配置网络连接的相关参数,如每个进程的最大连接数。
- http 块:配置服务器的参数,如文件引入、日志定义、MIME-TYPE 定义等。
- server 块:配置虚拟主机的相关参数,如监听端口、服务器名称。
- location 块:配置请求的匹配和处理规则。
基本配置示例
user nginx; # nginx进行运行的用户
error_log /var/log/nginx/error.log; # 错误日志
http {
log_format main ...; # nginx日志格式
access_log /var/log/nginx/access.log main; # 日志位置
# 引入的nginx配置文件,可以将server放在该目录下,方便管理
include /etc/nginx/conf.d/*.conf;
# 一个nginx服务一个server
server {
listen 80; # 服务启动的端口
server_name _; # 服务域名或IP
root /usr/share/nginx/html; # 服务指向的文件地址
error_page 404 /404.html; # 找不到资源重定向到404页面
location = /40x.html {};
error_page 500 502 503 504 /50x.html; # 系统错误重定向50x页面
location = /50x.html {};
}
# server {
# listen 443; # 支持https协议
# server_name _;
# root /usr/share/nginx/html;
# ...
# }
}
启动服务与查看运行状态
# 启动nginx
systemctl start nginx
# 查看nginx运行状态
systemctl status nginx
Nginx 性能优化
开启 gzip 压缩
http {
# 开启关闭
gzip on;
# 压缩的文件类型
gzip_types text/plain text/css application/javascript;
# 过小的文件没必要压缩
gzip_min_length 1000; # 单位Byte
gzip_comp_level 5; # 压缩比,默认1,范围时1-9,值越大压缩比最大,但处理最慢,所以设置5左右比较合理。
}
静态资源缓存
location ~* \.(jpg|jpeg|png|gif|ico|css|js|swf|flv|mp3|txt)$ {
#匹配到的资源有效期设置为30天;
expires 30d;
access_log off;
}
反向代理配置
代理的时候要注意添加必要的参数,帮助后端获取一些客户端的请求数据
-
proxy_set_header Host $host
:客户端请求的主机名(Host),不加的话,后端无法获取主机名信息 -
proxy_set_header X-Real-IP $remote_addr
:用户的真实IP(X-Real-IP),如果不设置,后端只能拿到代理服务器的IP -
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for:
代理链路,如果用户中间经过了多个代理服务器,如果不加这个参数,那么后端服务将无法获取用户的真实来源
location /api/ {
proxy_pass http://backend-server;
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;
}
处理前端路由的 404 问题
增加一行try_files配置,当请求的地址找不到时,重新指向index.html文件
server {
listen 80;
server_name localhost;
root /data/www/;
location / {
try_files $uri $uri/ /index.html;
index index.html;
}
}
安全优化
- 禁止访问敏感目录
- 设置合理的 HTTP 头部
- 使用 HTTPS
监控 Nginx 状态
可以通过安装 ngx_http_stub_status_module
模块来监控 Nginx 的性能状态。
总结
Nginx 是前端项目部署的重要工具,掌握其基本的配置和优化技巧对于前端开发者来说非常重要。通过合理配置,可以显著提高网站的加载速度和性能,同时也能增强网站的安全性。希望这篇文章能帮助你更好地理解和使用 Nginx。