请教个 Nginx 的 rewrite 问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
care
V2EX    NGINX

请教个 Nginx 的 rewrite 问题

  •  
  •   care 2019-01-06 12:05:51 +08:00 4497 次点击
    这是一个创建于 2545 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我 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)

    第 1 条附言    2019-01-06 20:52:46 +08:00
    不管怎么改都无法访问,所以附上完整的配置文件信息,由于 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;
    第 2 条附言    2019-01-06 20:53:11 +08:00
    #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 条回复    2019-01-07 11:01:42 +08:00
    wly19960911
        1
    wly19960911  
       2019-01-06 12:09:28 +08:00 via Android
    看不懂你的规则想表达什么,location / 下面访问哪个目录了?还有 location /phpMyAdmin 居然是 nextcloud 文件夹。
    msg7086
        2
    msg7086  
       2019-01-06 12:12:06 +08:00
    phpmyadmin 指向 nextcloud ?
    0ZXYDDu796nVCFxq
        3
    0ZXYDDu796nVCFxq  
       2019-01-06 12:13:30 +08:00 via Android
    location = /phpmyadmin
    改为
    location /phpmyadmin
    care
        4
    care  
    OP
       2019-01-06 12:17:42 +08:00 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
       2019-01-06 12:19:08 +08:00 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  
       2019-01-06 12:30:46 +08:00 via Android
    我不清楚,这个样子我感觉有可能不仅是这两个规则影响,= 也可以去掉,错误日志和规则表现完全不一样…
    msg7086
        7
    msg7086  
       2019-01-06 12:32:31 +08:00
    1. root 或者 alias 可以直接改 root 地址。你可以在 location /phpmyadmin {} 段里面直接 alias 到另一个目录,不需要把 PMA 复制进 NC 里。(而且复制进 NC 是很不好的习惯。)
    2. root 和 index 一般是放在 server 段里的,而不是放在 location 段里的。
    3. 如上面所说,location 后面的等号要去掉。有等号说明只匹配 /phpmyadmin 而不匹配目录和其中的文件。
    care
        8
    care  
    OP
       2019-01-06 12:34:19 +08:00 via iPhone
    @gstqc 先谢谢你的回复,我试过了不行。
    zen9073
        9
    zen9073  
       2019-01-06 12:36:55 +08:00
    你先把 root 挪到 location 外面来试试
    care
        10
    care  
    OP
       2019-01-06 13:29:10 +08:00 via iPhone
    @zen9073 配置里 server 段已经定义了 root 目录(/var/www/html/nextcloud ),但是还是无法正常访问,所以我 google 了类似的案例,得到的这段 /phpmyadmin 的代码
    care
        11
    care  
    OP
       2019-01-06 14:04:14 +08:00 via iPhone
    @msg7086 这样的话,我是不是重新开个 vhost 来访问 phpmyadmin 的意思?因为现在 default 我用 NC 目录作为 webroot 目录了。
    msg7086
        12
    msg7086  
       2019-01-06 16:55:13 +08:00   1
    @care
    root /xxx/netcloud
    location /pma { alias /yyy/pma; }

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

    注意最后的斜杆
    care
        15
    care  
    OP
       2019-01-06 21:49:44 +08:00 via iPhone
    @bin456789 也是不行,我就郁闷了。
    msg7086
        16
    msg7086  
       2019-01-07 05:27:23 +08:00
    pma 也是被害重地啊,最好起个完全无关的名字,让人联想不到是 pma 的最好。
    然后我先问一句,你改了配置以后重启过 nginx 么?
    以及你说的不行是怎么个不行? 403 ? 404 ?还是什么。
    care
        17
    care  
    OP
       2019-01-07 06:57:21 +08:00 via iPhone
    @msg7086 我改完配置都会执行 systemctl reload nginx.service 打开 http://localhost/pma 都是报 404
    roadli
        18
    roadli  
       2019-01-07 10:06:18 +08:00
    需要注意 location 的匹配优先级,匹配.php 的正则优先于普通前缀匹配 /pma 了
    linxiaojialin
        19
    linxiaojialin  
       2019-01-07 10:36:44 +08:00
    你可以把 phpmyadmin 做成跟 pma 一样啊,放到。
    location /pma {
    alias /var/www/html/pma;
    }
    linxiaojialin
        20
    linxiaojialin  
       2019-01-07 10:37:46 +08:00
    @linxiaojialin 放到 /var/www/html/phpmyadmin
    care
        21
    care  
    OP
       2019-01-07 11:01:42 +08:00 via iPhone
    @linxiaojialin 我现在已经把 phpmyadmin mv 为 pma 了的,但是打开还是 404 报错,可能就像上面那位朋友说的匹配优先级问题?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5428 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 02:35 PVG 10:35 LAX 18:35 JFK 21:35
    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