首页 > 解决方案 > NGINX如何重写路径名而不是文件?

问题描述

我有一个 NGINX 服务器,它在/. UI 在 localhost:8081 上运行,服务器在 localhost:8080 上运行。

我需要将输入的任何路径名传递给 UI 的根目录。

例如:

localhost:8080/search应该 proxy_pass 到localhost:8081

但不应更改文件:

localhost:8080/main.css=>localhost:8081/main.css


这有效但不是动态的

我尝试为每个路径名使用单独的位置,但是我希望配置是动态的以供将来开发。

location / {
  proxy_pass http://localhost:8081;
}

location /search {
  proxy_pass http://localhost:8081/;
}

location /foobar {
  proxy_pass http://localhost:8081/;
}

文件名处理程序

我尝试捕获文件名,但您不能在正则表达式位置块中使用 proxy_pass。

location ~* \.(.*?)$ {
  proxy_pass http://localhost:8081/;
}

尝试文件

我尝试使用try_files但 nginx 没有提供任何服务(提示我设置 nginx)

location / {
  try_files $uri $uri/ @app;
}

location @app {
  proxy_pass http://localhost:8081;
}

我的 Nginx 配置看起来像这样,没有位置块

worker_processes  1;

error_log   /usr/local/etc/nginx/logs/error.log notice;

events {
    worker_connections  1024;
}


http {
    include mime.types;
    default_type  application/octet-stream;

    log_format main '[$time_local] $remote_addr - "$request" '
        '$status "$http_referer" => "$proxy_host" $uri';
    log_format log_server escape=json '$request_body';

    access_log  /usr/local/etc/nginx/logs/access.log  main;

    proxy_max_temp_file_size 0;
    proxy_buffering off;

    sendfile        on;
    keepalive_timeout  65;
    gzip  on;

    server {
        listen       8080;
        server_name  localhost;
        rewrite_log  on;

        add_header 'Access-Control-Allow-Origin' 'http://localhost';
        add_header 'Access-Control-Allow_Credentials' 'true';
        add_header 'Access-Control-Allow-Headers' 'Authorization,Accept,Origin,DNT,Keep-Alive,User-Agent,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range';
        add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS,PUT,DELETE,PATCH';

        location / {
            # stuff from above + headers
        }
    }
}

我正在使用 webpack 开发服务器进行本地开发,但是最终的捆绑包具有以下结构:

/root
  bundle.js
  main.css
  index.html
  cd6c777f1945164224dee082abaea03a.woff2
  etc...

标签: nginx

解决方案


推荐阅读