在部署 Magento 网站时,使用 Nginx 作为 Web 服务器是一种高性能的选择。本文将手把手教你如何配置 Nginx 以支持 Magento 的运行,包括 HTTP、HTTPS 和伪静态(美化 URL)配置,提升速度和安全性。
一、基本 HTTP 配置(端口 80)
首先设置 HTTP(80端口)的配置:
server { listen 80; server_name example.com; # 修改为你的域名或服务器IP access_log logs/host.access.log main; location / { root /var/www/magento; # 修改为你的 Magento 安装目录 index index.php index.html index.htm; # 推荐方式:使用 try_files 优雅处理伪静态 try_files $uri $uri/ /index.php?$args; # 若你使用了 fooman-speedster 插件,可启用以下规则: # rewrite ^(/index.php)?/minify/([^/]+)(/.*\.(js|css))$ /lib/minify/m.php?f=$3&d=$2 last; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/magento$fastcgi_script_name; include fastcgi_params; } location /app/etc { deny all; } }
📌 什么是 try_files?为什么推荐?
try_files $uri $uri/ /index.php?$args;
这行配置非常关键,它实现了现代 PHP 框架常用的“伪静态”逻辑,执行以下尝试顺序:
$uri
:如果访问的路径是实际存在的文件,则直接返回;$uri/
:如果是实际存在的目录,也直接访问;/index.php?$args
:否则将请求交给index.php
并保留原参数。
示例:
请求:/products/view?id=123
若该路径不是文件或目录,Nginx 会自动转向:/index.php?id=123
,由 Magento 自行解析路由。
这比使用多个 if
和 rewrite
更高效,也更符合 Nginx 的最佳实践。
二、启用 HTTPS 配置(端口 443)
申请并安装 SSL 证书后,可以启用 HTTPS:
server { listen 443 ssl; server_name example.com; ssl_certificate /usr/local/nginx/conf/ssl/server.crt; ssl_certificate_key /usr/local/nginx/conf/ssl/server.key; location / { root /var/www/magento; index index.php index.html index.htm; try_files $uri $uri/ /index.php?$args; # rewrite ^(/index.php)?/minify/([^/]+)(/.*\.(js|css))$ /lib/minify/m.php?f=$3&d=$2 last; } location ~ \.php$ { root /var/www/magento; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param HTTPS on; # 防止 HTTPS 访问产生重定向问题 fastcgi_param SCRIPT_FILENAME /var/www/magento$fastcgi_script_name; include fastcgi_params; } location /app/etc { deny all; } }
三、建议增强项
1. 自动跳转到 HTTPS
server { listen 80; server_name example.com; return 301 https://$host$request_uri; }
2. 增强安全性:屏蔽敏感文件
location ~* /(composer\.json|composer\.lock|\.git|\.svn|\.env|README\.md) { deny all; }
3. 性能优化建议(可选)
- 开启 Gzip 压缩
- 使用 CDN 加速静态资源
- 使用 Redis / Varnish 缓存加速
四、检查配置并重启 Nginx
执行以下命令确保 Nginx 配置正确:
nginx -t # 检查配置文件语法是否正确 systemctl reload nginx # 重载服务使配置生效
结语
以上就是 Magento 在 Nginx 上的完整配置方案。我们推荐使用 try_files
来实现 URL 重写,代替老旧的 if
和 rewrite
写法,以确保高性能和更易维护的结构。
你可以直接将上述配置保存为 /etc/nginx/conf.d/magento.conf
,或添加到你当前的 Nginx 虚拟主机配置中。