首页 > 解决方案 > 为什么我的 nginx 重写规则没有按预期工作?

问题描述

我有以下配置:

upstream fastcgi_backend {
    server 127.0.0.1:9000;
}

server {
    listen 8088;
    server_name _;

    rewrite_log on;

    location /magento235/ {
        rewrite ^/magento235(?:/?)(.*)$ /$1 last;
    }

    location /magento235 {
        rewrite ^/magento235(?:/?)(.*)$ / last;
    }

    set $MAGE_ROOT /var/www/html;
    client_max_body_size 32M;

    real_ip_header X-Forwarded-For;
    set_real_ip_from 172.18.0.0/24;
    set_real_ip_from 172.17.0.0/24;

    include /etc/nginx/conf.d/magento2;
}

这是我的/etc/nginx/conf.d/magento2文件内容:

root $MAGE_ROOT/pub;

index index.php;
autoindex off;
charset UTF-8;
error_page 404 403 = /errors/404.php;
#add_header "X-UA-Compatible" "IE=Edge";


# Deny access to sensitive files
location /.user.ini {
    deny all;
}

# PHP entry point for setup application
location ~* ^/setup($|/) {
    root $MAGE_ROOT;
    location ~ ^/setup/index.php {
        fastcgi_pass fastcgi_backend;

        fastcgi_param PHP_FLAG "session.auto_start=off \n suhosin.session.cryptua=off";
        fastcgi_param PHP_VALUE "memory_limit=756M \n max_execution_time=600";
        fastcgi_read_timeout 600s;
        fastcgi_connect_timeout 600s;

        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ ^/setup/(?!pub/). {
        deny all;
    }

    location ~ ^/setup/pub/ {
        add_header X-Frame-Options "SAMEORIGIN";
    }
}

# PHP entry point for update application
location ~* ^/update($|/) {
    root $MAGE_ROOT;

    location ~ ^/update/index.php {
        fastcgi_split_path_info ^(/update/index.php)(/.+)$;
        fastcgi_pass fastcgi_backend;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        include fastcgi_params;
    }

    # Deny everything but index.php
    location ~ ^/update/(?!pub/). {
        deny all;
    }

    location ~ ^/update/pub/ {
        add_header X-Frame-Options "SAMEORIGIN";
    }
}

location / {
    try_files $uri $uri/ /index.php$is_args$args;
}

location /pub/ {
    location ~ ^/pub/media/(downloadable|customer|import|theme_customization/.*\.xml) {
        deny all;
    }
    alias $MAGE_ROOT/pub/;
    add_header X-Frame-Options "SAMEORIGIN";
}

location /static/ {
    # Uncomment the following line in production mode
    # expires max;

    # Remove signature of the static files that is used to overcome the browser cache
    location ~ ^/static/version {
        rewrite ^/static/(version[^/]+/)?(.*)$ /static/$2 last;
    }

    location ~* \.(ico|jpg|jpeg|png|gif|svg|js|css|swf|eot|ttf|otf|woff|woff2|json)$ {
        add_header Cache-Control "public";
        add_header X-Frame-Options "SAMEORIGIN";
        expires +1y;

        if (!-f $request_filename) {
            rewrite ^/static/?(.*)$ /static.php?resource=$1 last;
        }
    }
    location ~* \.(zip|gz|gzip|bz2|csv|xml)$ {
        add_header Cache-Control "no-store";
        add_header X-Frame-Options "SAMEORIGIN";
        expires off;

        if (!-f $request_filename) {
            rewrite ^/static/?(.*)$ /static.php?resource=$1 last;
        }
    }
    if (!-f $request_filename) {
        rewrite ^/static/?(.*)$ /static.php?resource=$1 last;
    }
    add_header X-Frame-Options "SAMEORIGIN";
}

location /media/ {
    try_files $uri $uri/ /get.php$is_args$args;

    location ~ ^/media/theme_customization/.*\.xml {
        deny all;
    }

    location ~* \.(ico|jpg|jpeg|png|gif|svg|js|css|swf|eot|ttf|otf|woff|woff2)$ {
        add_header Cache-Control "public";
        add_header X-Frame-Options "SAMEORIGIN";
        expires +1y;
        try_files $uri $uri/ /get.php$is_args$args;
    }
    location ~* \.(zip|gz|gzip|bz2|csv|xml)$ {
        add_header Cache-Control "no-store";
        add_header X-Frame-Options "SAMEORIGIN";
        expires off;
        try_files $uri $uri/ /get.php$is_args$args;
    }
    add_header X-Frame-Options "SAMEORIGIN";
}

location /media/customer/ {
    deny all;
}

location /media/downloadable/ {
    deny all;
}

location /media/import/ {
    deny all;
}

# PHP entry point for main application
location ~ ^/(index|get|static|errors/report|errors/404|errors/503|health_check)\.php$ {
    try_files $uri =404;
    fastcgi_pass fastcgi_backend;
    fastcgi_buffers 4 256k;
    fastcgi_buffer_size 128k;

    fastcgi_param PHP_FLAG "session.auto_start=off \n suhosin.session.cryptua=off";
    ## SKREY - "unoverride" php fpm parameters
    #fastcgi_param  PHP_VALUE "memory_limit=756M \n max_execution_time=18000";
    #fastcgi_read_timeout 600s;
    #fastcgi_connect_timeout 600s;

    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

gzip on;
gzip_disable "msie6";

gzip_comp_level 6;
gzip_min_length 1100;
gzip_buffers 16 8k;
gzip_proxied any;
gzip_types
text/plain
text/css
text/js
text/xml
text/javascript
application/javascript
application/x-javascript
application/json
application/xml
application/xml+rss
image/svg+xml;
gzip_vary on;

# Banned locations (only reached if the earlier PHP entry point regexes don't match)
location ~* (\.php$|\.htaccess$|\.git) {
    deny all;
}

如果我做一个,curl http://127.0.0.1:10080/magento235我会在日志中得到以下输出:

2021/08/24 09:21:29 [notice] 9#9: *20 "^/magento235(?:/?)(.*)$" matches "/magento235", client: 172.23.0.5, server: _, request: "GET /magento235 HTTP/1.1", host: "127.0.0.1:10080"
2021/08/24 09:21:29 [notice] 9#9: *20 rewritten data: "/", args: "", client: 172.23.0.5, server: _, request: "GET /magento235 HTTP/1.1", host: "127.0.0.1:10080"
172.23.0.5 - - [24/Aug/2021:09:21:30 +0000] "GET /magento235 HTTP/1.1" 302 5 "-" "curl/7.68.0" "172.23.0.1" 0.084 0.080 . -

这里的问题是,根据 NGINX 我的重写规则删除了URL 的magento235部分,但是 Magento2 网页显示 404 而不是提供正常的主页。

我的问题/问题是:为什么在重写规则告诉我之后它不为我提供主页rewritten data: "/"?难道不是应该在重写之后,在“/”位置为我提供文件吗?

我的重写规则错了吗?我有 2 个,因为我需要从 URL附加/magento235AND :/magento235

https://my.domain.com/magento235/foo/bar -> https://my.domain.com/foo/bar https://my.domain.com/magento235 -> https://my.domain .com/ https://my.domain.com/magento235/ -> https://my.domain.com/

标签: nginxurl-rewritingmagento2reverse-proxymagento-2.3

解决方案


推荐阅读