html - 将 Apache Mod Rewrite 规则转换为 NGINX
问题描述
我目前正在托管 ShoutCast Manager 的副本,以便人们可以使用 Web 界面流式传输音频并配置他们的流式传输。
我使用 Apache 2.4 Web 服务器作为 HTTP 服务器,处理大型上传文件似乎存在问题。我编辑了我的 Apache 配置以允许上传更大的文件,并增加了超时限制。PHP 还增加了超时限制,以及增加了 512MiB 的内存限制。
上传大小超过 200MiB 的音频文件时,服务器响应“服务不可用”并且文件上传未完成。
因此,我希望将 NGINX 作为我的 Web 服务器解决方案,但在将我的重写规则转换为适用于 NGINX 的规则时遇到问题。我目前与 Apache 一起使用的规则如下:
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
# Rewrites
RewriteRule ^view/([0-9]+)/([0-9]+)/([^/]*)$ ./viewserver.php?portbase=$1&id=$2&srvname=$3 [L,QSA]
RewriteRule ^view/([0-9]+)/([0-9]+)/([^/]*)/$ ./viewserver.php?portbase=$1&id=$2&srvname=$3 [L,QSA]
RewriteRule ^start/([0-9]+)/([0-9]+)/([^/]*)$ ./control.php?control=$1&id=$2&action=start&srvname=$3 [L,QSA]
RewriteRule ^start/([0-9]+)/([0-9]+)/([^/]*)/$ ./control.php?control=$1&id=$2&action=start&srvname=$3 [L,QSA]
RewriteRule ^stop/([0-9]+)/([0-9]+)/([^/]*)$ ./control.php?control=$1&id=$2&action=stop&srvname=$3 [L,QSA]
RewriteRule ^stop/([0-9]+)/([0-9]+)/([^/]*)/$ ./control.php?control=$1&id=$2&action=stop&srvname=$3 [L,QSA]
RewriteRule ^restart/([0-9]+)/([0-9]+)/([^/]*)$ ./control.php?control=$1&id=$2&action=restart&srvname=$3 [L,QSA]
RewriteRule ^restart/([0-9]+)/([0-9]+)/([^/]*)/$ ./control.php?control=$1&id=$2&action=restart&srvname=$3 [L,QSA]
RewriteRule ^edit/([0-9]+)/([0-9]+)/([^/]*)$ ./edit.php?portbase=$1&id=$2&status=$3 [L,QSA]
RewriteRule ^edit/([0-9]+)/([0-9]+)/([^/]*)/$ ./edit.php?portbase=$1&id=$2&status=$3 [L,QSA]
RewriteRule ^delete/([0-9]+)/([0-9]+)/([^/]*)$ ./delete.php?id=$1&port=$2&srvname=$3 [L,QSA]
RewriteRule ^delete/([0-9]+)/([0-9]+)/([^/]*)/$ ./delete.php?id=$1&port=$2&srvname=$3 [L,QSA]
RewriteRule ^widgets/([^/]*)/([^/]*)\.js$ ./include/widgets.js.php?port=$1&type=$2 [L,QSA]
RewriteRule ^public/api/autodj/([^/]*)/([^/]*)/([^/]*)$ ./api/api.controller/index.php?api-key=$1&port=$2&action=autodj&autodj=$3 [L,QSA]
RewriteRule ^public/api/autodj/([^/]*)/([^/]*)/([^/]*)/$ ./api/api.controller/index.php?api-key=$1&port=$2&action=autodj&autodj=$3 [L,QSA]
RewriteRule ^public/api/server/([^/]*)/([^/]*)/([^/]*)$ ./api/api.controller/index.php?api-key=$1&port=$2&action=$3 [L,QSA]
RewriteRule ^public/api/server/([^/]*)/([^/]*)/([^/]*)/$ ./api/api.controller/index.php?api-key=$1&port=$2&action=$3 [L,QSA]
RewriteRule ^public/api/schedule/([^/]*)/([^/]*)/([^/]*)$ ./api/api.controller/index.php?api-key=$1&port=$2&action=schedule&schedule=$3 [L,QSA]
RewriteRule ^public/api/schedule/([^/]*)/([^/]*)/([^/]*)/$ ./api/api.controller/index.php?api-key=$1&port=$2&action=schedule&schedule=$3 [L,QSA]
RewriteRule ^download-playlist/([0-9]+).([^/]*)$ ./include/widgets/playlists/playlists.php?port=$1&type=$2 [L,QSA]
RewriteRule ^events/([^/]*)/$ ./eventlog.php?log=$1 [L,QSA]
RewriteRule ^events/([^/]*)/([^/]*)/$ ./eventlog.php?log=$1&page=$2 [L,QSA]
# Errors
RewriteRule ^errors/404/$ ./404.php [L,QSA]
ErrorDocument 404 /errors/404/
RewriteRule ^errors/403/$ ./404.php [L,QSA]
ErrorDocument 403 /errors/403/
RewriteRule ^errors/500/$ ./500.php [L,QSA]
ErrorDocument 500 /errors/500/
ShoutCast Manager 的副本可以在这里找到:https ://github.com/gaza1994/SHOUTcast-Manager
任何有关使 NGINX 兼容的重写规则的帮助都将非常感激!
解决方案
这是未经测试的,但这应该可以解决问题
error_page 500 /errors/500/;
error_page 404 /errors/404/;
error_page 403 /errors/403/;
rewrite ^/view/([0-9]+)/([0-9]+)/([^/]*)$ /viewserver.php?portbase=$1&id=$2&srvname=$3 last;
rewrite ^/view/([0-9]+)/([0-9]+)/([^/]*)/$ /viewserver.php?portbase=$1&id=$2&srvname=$3 last;
rewrite ^/start/([0-9]+)/([0-9]+)/([^/]*)$ /control.php?control=$1&id=$2&action=start&srvname=$3 last;
rewrite ^/start/([0-9]+)/([0-9]+)/([^/]*)/$ /control.php?control=$1&id=$2&action=start&srvname=$3 last;
rewrite ^/stop/([0-9]+)/([0-9]+)/([^/]*)$ /control.php?control=$1&id=$2&action=stop&srvname=$3 last;
rewrite ^/stop/([0-9]+)/([0-9]+)/([^/]*)/$ /control.php?control=$1&id=$2&action=stop&srvname=$3 last;
rewrite ^/restart/([0-9]+)/([0-9]+)/([^/]*)$ /control.php?control=$1&id=$2&action=restart&srvname=$3 last;
rewrite ^/restart/([0-9]+)/([0-9]+)/([^/]*)/$ /control.php?control=$1&id=$2&action=restart&srvname=$3 last;
rewrite ^/edit/([0-9]+)/([0-9]+)/([^/]*)$ /edit.php?portbase=$1&id=$2&status=$3 last;
rewrite ^/edit/([0-9]+)/([0-9]+)/([^/]*)/$ /edit.php?portbase=$1&id=$2&status=$3 last;
rewrite ^/delete/([0-9]+)/([0-9]+)/([^/]*)$ /delete.php?id=$1&port=$2&srvname=$3 last;
rewrite ^/delete/([0-9]+)/([0-9]+)/([^/]*)/$ /delete.php?id=$1&port=$2&srvname=$3 last;
rewrite ^/widgets/([^/]*)/([^/]*)\.js$ /include/widgets.js.php?port=$1&type=$2 last;
rewrite ^/public/api/autodj/([^/]*)/([^/]*)/([^/]*)$ /api/api.controller/index.php?api-key=$1&port=$2&action=autodj&autodj=$3 last;
rewrite ^/public/api/autodj/([^/]*)/([^/]*)/([^/]*)/$ /api/api.controller/index.php?api-key=$1&port=$2&action=autodj&autodj=$3 last;
rewrite ^/public/api/server/([^/]*)/([^/]*)/([^/]*)$ /api/api.controller/index.php?api-key=$1&port=$2&action=$3 last;
rewrite ^/public/api/server/([^/]*)/([^/]*)/([^/]*)/$ /api/api.controller/index.php?api-key=$1&port=$2&action=$3 last;
rewrite ^/public/api/schedule/([^/]*)/([^/]*)/([^/]*)$ /api/api.controller/index.php?api-key=$1&port=$2&action=schedule&schedule=$3 last;
rewrite ^/public/api/schedule/([^/]*)/([^/]*)/([^/]*)/$ /api/api.controller/index.php?api-key=$1&port=$2&action=schedule&schedule=$3 last;
rewrite ^/download-playlist/([0-9]+).([^/]*)$ /include/widgets/playlists/playlists.php?port=$1&type=$2 last;
rewrite ^/events/([^/]*)/$ /eventlog.php?log=$1 last;
rewrite ^/events/([^/]*)/([^/]*)/$ /eventlog.php?log=$1&page=$2 last;
SHOUTcast manager 在 NGINX 下也应该能正常运行!
推荐阅读
- python - 如何遍历 2 个巨大的列表并查找列表 1 中的每个元素是否是列表 2 元素的一部分?
- java - 多次使用时,函数未返回所需的值
- unix - 我想在日志文件中打印出 2347=value 之后的值。请注意,2347 的位置不是固定的,所以不能使用 cut -d
- c# - 快速点击时如何使游戏对象速度不断增加
- ios - UIStackView内的NSLayout约束无法同时满足约束
- python - 从 Azure Databricks 将数据写入 Azure Blob 存储
- android - 应用程序崩溃并且不将数据存储到 Firebase
- jquery - jQuery 错误?(“this”成员消失)
- python - 行之间的Python pandas日期差异
- php - gnupg 加密 PHP