V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
redbelt
V2EX  ›  问与答

nginx 配置请教大佬?

  •  
  •   redbelt · 2019-08-18 10:10:25 +08:00 · 1839 次点击
    这是一个创建于 1958 天前的主题,其中的信息可能已经有所发展或是发生改变。
    想做到:
    访问路径任意「图片路径」( mydomain.com/xxx/xxx/xx.jpg
    都到指定路径(/var/local/img )下找文件
    10 条回复    2019-08-18 16:17:49 +08:00
    mikeguan
        1
    mikeguan  
       2019-08-18 10:12:30 +08:00 via Android
    root 和 rewrite 或许可以满足你的需求
    xiri
        2
    xiri  
       2019-08-18 10:24:12 +08:00
    如果你是想做到访问 mydomain.com/123/a.jpg ,结果到 /var/local/img/123/a.jpg 找文件,把 root 目录设为 /var/local/img 就够了

    如果你是想做到访问 mydomain.com/123/a.jpg ,结果到 /var/local/img/a.jpg (没有 123 目录)找文件,在对应的 location 里指定 alias 到 /var/local/img 就行了
    redbelt
        3
    redbelt  
    OP
       2019-08-18 10:24:23 +08:00
    现在是 /var/local/img/ 下有很多图片 比如 1.jpg
    我想通过 任意路径 只要结尾是 1.jpg 就行
    比如 mydomain.com/test/test/1.jpg
    redbelt
        4
    redbelt  
    OP
       2019-08-18 10:25:03 +08:00
    @mikeguan @xiri 感谢 我再试试
    xiri
        5
    xiri  
       2019-08-18 10:27:30 +08:00
    @xiri 纠错一下,alias 的路径后面必须以 /结尾,所以应该设为 /var/local/img/

    @redbelt 你的需求用 alias 应该是可以解决的
    ipwx
        6
    ipwx  
       2019-08-18 10:32:17 +08:00
    @xiri 楼主的要求是 任意路径,不是 已知路径。

    @redbelt 你的需求要 rewrite。
    redbelt
        7
    redbelt  
    OP
       2019-08-18 10:33:48 +08:00
    按照 @xiri 大佬的指导配置了一下 ,还是不行 ,我补充下配置和日志:

    测试地址: http://note.tianyongwei.com/%E7%AC%94%E8%AE%B0/0%E9%80%9A%E8%AF%86%E6%8A%80%E6%9C%AF/image-20190727104421457.png/

    配置文件:
    server {
    listen 80;
    server_name note.tianyongwei.com;
    # root /usr/share/nginx/Note/note_by_js;

    # Load configuration files for the default server block.
    # include /etc/nginx/default.d/*.conf;

    location ~ \.(jpg|jpeg|png|gif)$ {
    alias /usr/share/nginx/Note/assets/;
    }

    location / {
    root /usr/share/nginx/Note/note_by_js;
    index index.html;
    }
    access_log /var/log/nginx/note.log;
    }

    nginx error.log

    2019/08/18 10:31:45 [error] 16320#0: *147710 "/usr/share/nginx/Note/note_by_js/笔记 /0 通识技术 /image-20190727104421457.png/index.html" is not found (2: No such file or directory), client: 219.143.150.68, server: note.tianyongwei.com, request: "GET /%E7%AC%94%E8%AE%B0/0%E9%80%9A%E8%AF%86%E6%8A%80%E6%9C%AF/image-20190727104421457.png/ HTTP/1.1", host: "note.tianyongwei.com"
    redbelt
        8
    redbelt  
    OP
       2019-08-18 10:34:55 +08:00
    @ipwx 感谢大佬提供思路,确是「任意路径」
    zw1one
        9
    zw1one  
       2019-08-18 11:45:03 +08:00
    location ~ .*\.(jpg|jpeg|png|gif)$ {
    alias /usr/share/nginx/Note/assets/;
    }
    redbelt
        10
    redbelt  
    OP
       2019-08-18 16:17:49 +08:00
    算是弄出来了 , 奉上配置。

    思路是重写 ,但最后用了 try_files , 其中区别暂不求甚解。

    难点在匹配文件的正则
    location ~ /([^/]*)\.(jpg|jpeg|png|gif)$ {
    try_files $uri $uri/ /assets/$1.$2;
    }



    ```
    server {
    listen 80;
    server_name your.domain.com;

    # 这个正则的作用
    # 1. 匹配图片文件,四种文件格式结尾
    # 2. 第一个小括号确定能拿到文件名
    location ~ /([^/]*)\.(jpg|jpeg|png|gif)$ {
    try_files $uri $uri/ /assets/$1.$2;
    }

    # 全站的图片文件都在「/usr/share/nginx/Note/assets 」这个文件夹中,没有子文件夹
    location ^~ /assets/ {
    root /usr/share/nginx/Note;
    if (-f $request_filename) {
    expires 1h;
    break;
    }
    }

    location / {
    root /usr/share/nginx/Note/note_by_js;
    index index.html;
    }

    location ~ \.md$ {
    root /usr/share/nginx/Note/note_by_js;
    }

    access_log /var/log/nginx/note.log;
    }
    ```
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   948 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 21:01 · PVG 05:01 · LAX 13:01 · JFK 16:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.