请教个 Nginx 的 rewrite 问题 - V2EX
care
V2EX    NGINX

请教个 Nginx 的 rewrite 问题

  •  
  •   care Jan 6, 2019 4774 views
    This topic created in 2710 days ago, the information mentioned may be changed or developed.

    我 LNMP 环境安装 Nextcloud,因为要设置伪静态,所以根据官方文档做了以下配置:

    location = /phpmyadmin {

     root /var/www/html/nextcloud; index index.html index.htm index.php; } location / { rewrite ^ /index.php$request_uri; } 

    我想通过 nginx 访问 phpmyadmin 来管理 mysql,但是我访问 http://localhost/phpmyadmin 时,Nginx 会报 404 错

    误(默认 webroot 是 /var/www/html/nextcloud ),想请教下 location 应该怎么配置才能正确访问到 phpmyadmin

    tail /var/log/nginx/error.log 查看错误信息,报错如下:

    "/usr/share/nginx/html/pma/index.html" is not found (2: No such file or directory)

    Supplement 1    Jan 6, 2019
    不管怎么改都无法访问,所以附上完整的配置文件信息,由于 V 站附言限制,所以分成两个附言来显示配置文件:

    upstream php-handler {
    server unix:/var/run/php/php7.2-fpm.sock;
    }

    server {
    listen 80;
    listen [::]:80;
    server_name cloud.example.com;
    }

    server {
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Robots-Tag none;
    add_header X-Download-Options noopen;
    add_header X-Permitted-Cross-Domain-Policies none;
    add_header Referrer-Policy no-referrer;

    # Remove X-Powered-By, which is an information leak
    fastcgi_hide_header X-Powered-By;

    # Path to the root of your installation
    root /var/www/html/nextcloud/;
    location /pma {
    alias /var/www/html/pma;
    }

    location = /robots.txt {
    allow all;
    log_not_found off;
    access_log off;
    }

    # rewrite ^/.well-known/webfinger /public.php?service=webfinger last;

    location = /.well-known/carddav {
    return 301 $scheme://$host/remote.php/dav;
    }
    location = /.well-known/caldav {
    return 301 $scheme://$host/remote.php/dav;
    }

    # set max upload size
    client_max_body_size 512M;
    fastcgi_buffers 64 4K;

    # Enable gzip but do not remove ETag headers
    gzip on;
    gzip_vary on;
    gzip_comp_level 4;
    gzip_min_length 256;
    gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
    gzip_types application/atom+xml application/Javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;
    Supplement 2    Jan 6, 2019
    #pagespeed off;

    location / {
    rewrite ^ /index.php$request_uri;
    }

    location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
    deny all;
    }
    location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
    deny all;
    }

    location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+)\.php(?:$|/) {
    fastcgi_split_path_info ^(.+?\.php)(/.*)$;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_path_info;
    #fastcgi_param HTTPS on;
    #Avoid sending the security headers twice
    fastcgi_param modHeadersAvailable true;
    fastcgi_param front_controller_active true;
    fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
    fastcgi_intercept_errors on;
    fastcgi_request_buffering off;
    }

    location ~ ^/(?:updater|ocs-provider)(?:$|/) {
    try_files $uri/ =404;
    index index.php;
    }

    # Make sure it is BELOW the PHP block
    location ~ \.(?:css|js|woff2?|svg|gif)$ {
    try_files $uri /index.php$request_uri;
    add_header Cache-Control "public, max-age=15778463";
    # could take several months.
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Robots-Tag none;
    add_header X-Download-Options noopen;
    add_header X-Permitted-Cross-Domain-Policies none;
    add_header Referrer-Policy no-referrer;

    # Optional: Don't log access to assets
    access_log off;
    }

    location ~ \.(?:css|js|woff|svg|gif|png|html|ttf|ico|jpg|jpeg)$ {
    try_files $uri /index.php$request_uri;
    # Optional: Don't log access to other assets
    access_log off;
    }
    }
    21 replies    2019-01-07 11:01:42 +08:00
    wly19960911
        1
    wly19960911  
       Jn 6, 2019 via Android
    看不懂你的规则想表达什么,location / 下面访问哪个目录了?还有 location /phpMyAdmin 居然是 nextcloud 文件夹。
    msg7086
        2
    msg7086  
       Jan 6, 2019
    phpmyadmin 指向 nextcloud ?
    0ZXYDDu796nVCFxq
        3
    0ZXYDDu796nVCFxq  
       Jan 6, 2019 via Android
    location = /phpmyadmin
    改为
    location /phpmyadmin
    care
        4
    care  
    OP
       Jan 6, 2019 via iPhone
    @wly19960911 我创建了 default.conf,root 指定的 var/www/html/nextcloud,所以 phpmyadmin 放置在上面的 root 目录内( var/www/html/nextcloud/phpmyadmin )我想通过 http://localhost/phpmyadmin 访问管理 mysql
    care
        5
    care  
    OP
       Jan 6, 2019 via iPhone
    @msg7086 我创建了 default.conf,root 指定的 var/www/html/nextcloud,所以 phpmyadmin 放置在上面的 root 目录内( var/www/html/nextcloud/phpmyadmin )我想通过 http://localhost/phpmyadmin 访问管理 mysql,默认通过 http://localhost 现在是可以访问 nextcloud 的,但是访问 phpmyadmin 就不行
    wly19960911
        6
    wly19960911  
       Jan 6, 2019 via Android
    我不清楚,这个样子我感觉有可能不仅是这两个规则影响,= 也可以去掉,错误日志和规则表现完全不一样…
    msg7086
        7
    msg7086  
       Jan 6, 2019
    1. root 或者 alias 可以直接改 root 地址。你可以在 location /phpmyadmin {} 段里面直接 alias 到另一个目录,不需要把 PMA 复制进 NC 里。(而且复制进 NC 是很不好的习惯。)
    2. root 和 index 一般是放在 server 段里的,而不是放在 location 段里的。
    3. 如上面所说,location 后面的等号要去掉。有等号说明只匹配 /phpmyadmin 而不匹配目录和其中的文件。
    care
        8
    care  
    OP
       Jan 6, 2019 via iPhone
    @gstqc 先谢谢你的回复,我试过了不行。
    zzen
        9
    zzen  
       Jan 6, 2019
    你先把 root 挪到 location 外面来试试
    care
        10
    care  
    OP
       Jan 6, 2019 via iPhone
    @zen9073 配置里 server 段已经定义了 root 目录(/var/www/html/nextcloud ),但是还是无法正常访问,所以我 google 了类似的案例,得到的这段 /phpmyadmin 的代码
    care
        11
    care  
    OP
       Jan 6, 2019 via iPhone
    @msg7086 这样的话,我是不是重新开个 vhost 来访问 phpmyadmin 的意思?因为现在 default 我用 NC 目录作为 webroot 目录了。
    msg7086
        12
    msg7086  
       Jan 6, 2019   1
    @care
    root /xxx/netcloud
    location /pma { alias /yyy/pma; }

    顺便,不要把 phpmyadmin 作为目录的名字,除非你想让别人猜到目录名然后爆破你的数据库密码。
    care
        13
    care  
    OP
       Jan 6, 2019
    @msg7086 我用了 alias 还是不行,我上传了完整的配置文档,麻烦您帮忙看下是哪里有问题,谢谢。
    bin456789
        14
    bin456789  
       Jan 6, 2019
    location /pma {
    alias /var/www/html/pma/;
    }

    注意最后的斜杆
    care
        15
    care  
    OP
       Jan 6, 2019 via iPhone
    @bin456789 也是不行,我就郁闷了。
    msg7086
        16
    msg7086  
       Jan 7, 2019
    pma 也是被害重地啊,最好起个完全无关的名字,让人联想不到是 pma 的最好。
    然后我先问一句,你改了配置以后重启过 nginx 么?
    以及你说的不行是怎么个不行? 403 ? 404 ?还是什么。
    care
        17
    care  
    OP
       Jan 7, 2019 via iPhone
    @msg7086 我改完配置都会执行 systemctl reload nginx.service 打开 http://localhost/pma 都是报 404
    roadli
        18
    roadli  
       Jan 7, 2019
    需要注意 location 的匹配优先级,匹配.php 的正则优先于普通前缀匹配 /pma 了
    linxiaojialin
        19
    linxiaojialin  
       Jan 7, 2019
    你可以把 phpmyadmin 做成跟 pma 一样啊,放到。
    location /pma {
    alias /var/www/html/pma;
    }
    linxiaojialin
        20
    linxiaojialin  
       Jan 7, 2019
    @linxiaojialin 放到 /var/www/html/phpmyadmin
    care
        21
    care  
    OP
       Jan 7, 2019 via iPhone
    @linxiaojialin 我现在已经把 phpmyadmin mv 为 pma 了的,但是打开还是 404 报错,可能就像上面那位朋友说的匹配优先级问题?
    About     Help     Advertise     Blog     API     FAQ     Solana     5727 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 59ms UTC 06:34 PVG 14:34 LAX 23:34 JFK 02:34
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86