2015-10-12 4 views
0

У меня есть следующий файл конфигурации Nginx ...Nginx место конфигурации

server { 
    listen 80; 
    server_name 127.0.0.1 localhost; 
    location = /index.html { 
      root /etc/nginx/html/app1; 
      index index.html; 
    } 

    location/{ 
      root /etc/nginx/html/app1; 
      index index.html; 
    } 

    location /common/ { 
      root /etc/nginx/html/common; 
    } 
} 

И структура папок, как так ...

HTML \ app1

HTML \ общие

Когда я пытаюсь просмотреть ...

http://localhost/> Работы

http://localhsot/index.html> Работы

http://localhost/common/somefile.txt> Не работает

Что мне не хватает?

ответ

0

Потому что он во-первых соответствует location /. Вы можете сделать это следующим образом:

server { 
    listen 80; 
    server_name 127.0.0.1 localhost; 
    location = /index.html { 
      root /etc/nginx/html/app1; 
      index index.html; 
    } 

    location/{ 
      root /etc/nginx/html/app1; 
      index index.html; 
    } 

    location ^~ /common/ { 
      root /etc/nginx/html/common; 
    } 
} 

EDIT: Да. Это кажется сложным. Вы можете сделать это следующим образом:
Во-первых, необходимо создать новый сервер:

server { 
    listen 80; 
    server_name common.com; # A virtual host 
    root /etc/nginx/html/common; 
} 

Затем вам нужно изменить конфиг выше, как это:

server { 
    listen 80; 
    server_name 127.0.0.1 localhost; 
    location = /index.html { 
      root /etc/nginx/html/app1; 
      index index.html; 
    } 

    location/{ 
      root /etc/nginx/html/app1; 
      index index.html; 
    } 

    location ^~ /common/ { 
      rewrite ^/common(/.*)$ $1 break; # rewrite the /common/ 
      proxy_set_header Host common.com; # it will requests common.com which the server of 127.0.0.1. then will match the above server. 
      proxy_pass http://127.0.0.1; 
    } 
} 
+0

Я пробовал вашу конфигурацию, но по-прежнему та же ошибка. –

+0

Я думаю, что ваше решение ниже будет загрязнять каталог html. Это не очень хорошо. – zywj

+0

Ну, это только для моего понимания и упрощения проблемы, с которой я столкнулся. –

0

Я добавляю свой ответ, так как Я, наконец, начал работать. Проводка его здесь, так что это может помочь другим ...

server { 
listen 80; 
server_name 127.0.0.1 localhost; 
location = /index.html { 
     root /etc/nginx/html/app1; 
     index index.html; 
} 

location/{ 
     root /etc/nginx/html/app1; 
     index index.html; 
} 

location ^~ /common/ { 
     root /etc/nginx/html; 
} 
} 

В принципе, как Nginx пытается был/и т.д./Nginx/html/общие/общие. Удаление общего из обработанного корня. Также найдено, что http://localhost:8888/common/ необходимо иметь трейлинг /.

+0

Вам не нужно 'location =/index.html', потому что выражение' location/'содержит его. См. Мой ответ. – uzsolt

1

Вы должны использовать alias вместо root:

server { 
    listen 80; 
    server_name 127.0.0.1 localhost; 

    location/{ 
    root /etc/nginx/html/app1; 
    index index.html; 
    } 

    location /common { 
    alias /etc/nginx/html/common; 
    } 
} 

Если вы используете root в common127.0.0.1/common/somefile.txt попытается /etc/nginx/html/common/common/somefile.txt (обратите внимание на два common). Если вы проверите журналы nginx, вы можете это увидеть.

+0

Спасибо, uzsolt. Быстрый вопрос ... когда вы говорите журналы Nginx, вы имеете в виду журналы доступа? В моих журналах доступа я могу видеть только/общий путь. Есть ли какое-либо поле, которое я могу включить, который также покажет корневой путь? –

+0

Да, журналы доступа и ошибок. – uzsolt

Смежные вопросы