Nginx: маршрут на локальный хост - PullRequest
0 голосов
/ 13 апреля 2020

Я хочу настроить Nginx для маршрутизации нескольких проектов на локальном хосте, не касаясь файла hosts на моем компьютере.

Т.е. Nginx должен обрабатывать хотя бы пути

  1. http://localhost/project-one

  2. http://localhost/project-two

Я нашел один пример но в моем случае это не сработает:

# /etc/nginx/conf.ddefault.conf
server {
    listen       80;
    # server_name  localhost;
    index  index.html index.htm;

    location ~ ^/project-one {
        root   /usr/share/nginx/html/project-one;
        # index  index.html index.htm;
    }

    location ~ ^/project-two {
        root   /usr/share/nginx/html/project-two;
        # index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

Работает, если я установил только один location равным всего лишь sh и требуется root:

# /etc/nginx/conf.ddefault.conf
server {
    listen       80;
    # server_name  localhost;
    index  index.html index.htm;

    location / {
        root   /usr/share/nginx/html/project-one;
        # index  index.html index.htm;
    }
}

С этой конфигурацией он показывает html файл из каталога project-one в http://localhost.

Я использую Docker для тестирования:

docker run --rm --name my-nginx -p 80:80 -v $(pwd)/sites:/etc/nginx/conf.d -v $(pwd)/html:/usr/share/nginx/html -d nginx

Таким образом, я могу изменить файл default.conf для папки Nginx и html в локальных каталогах соответственно, а затем перезапустить: docker restart my-nginx

Как правильно настроить несколько местоположений для нескольких корни не трогая hosts файл?

1 Ответ

1 голос
/ 13 апреля 2020

Хорошо, наконец-то я понял ...

server {
    listen       80;
    # server_name  localhost;
    index  index.html index.htm;

    location ~ ^/project-one {
        root   /usr/share/nginx/html;
        # index  index.html index.htm;
    }

    location ~ ^/project-two {
        root   /usr/share/nginx/html;
        # index  index.html index.htm;
    }
}

И теперь все работает так, как я ожидал:

http://localhost/project-one

http://localhost/project-two

Каждый запрос направляется в другую папку относительно:

/usr/share/nginx/html/project-one/index.html

/usr/share/nginx/html/project-two/index.html

Благодаря @ RichardSmith.

...