首页 > 解决方案 > 将 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 兼容的重写规则的帮助都将非常感激!

标签: htmllinuxnginxserverwebserver

解决方案


这是未经测试的,但这应该可以解决问题

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 下也应该能正常运行!


推荐阅读