【问题标题】:Converting Apache Mod Rewrite rules to NGINX将 Apache Mod Rewrite 规则转换为 NGINX
【发布时间】:2019-09-13 00:40:49
【问题描述】:

我目前正在托管 ShoutCast Manager 的副本,以便人们可以使用网络界面流式传输音频和配置他们的流。

我使用 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 兼容重写规则的帮助!

【问题讨论】:

    标签: html linux nginx server webserver


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      试试这个工具。该工具将 Apache 的 .htaccess 转换为 nginx 配置指令。 https://winginx.com/en/htaccess

      【讨论】:

        猜你喜欢
        • 2014-03-16
        • 1970-01-01
        • 2019-12-19
        • 2019-03-10
        • 1970-01-01
        • 1970-01-01
        • 2016-06-18
        • 2021-07-08
        • 1970-01-01
        相关资源
        最近更新 更多