Расположение Nginx соответствует любому пути маршрутов Rails

Я хочу, чтобы мой nginx обслуживал статическую страницу index.html из любого запроса или пути. У меня следующий конфиг.

server {
    listen 80;
    server_name mydomain.com *.mydomain.com;
    location / {
            root /var/www/project-name;
            passenger_enabled on;
    }
}

Это работает, когда URL-адрес «mydomain.com» или «abc.mydomain.com», но не «abc.mydomain.com/users/sign_in».

Журнал ошибок nginx: /var/www/project-name/users/sign_in нет такого файла или каталога.

Я пробовал много регулярных выражений на месте, но не повезло.

Обновление: мой файл index.html находится здесь /var/www/project-name/index.html


person Pirun Seng    schedule 12.06.2017    source источник
comment
Спасибо @Deadoos. Вы указываете мне на решение. Ваше решение состоит в том, чтобы отобразить файл index.html в папке html в папке /opt/nginx. Поэтому я просто хочу сохранить значение по умолчанию index.html, так как это страница приветствия nginx, и вместо этого назвать мою статическую страницу static.html. Кроме того, мне нужно удалить $uri/, так как он отображает index.html по умолчанию. Так что мне подходит try_files $uri /static.html;   -  person Pirun Seng    schedule 12.06.2017
comment
Однако было бы хорошо, если бы я мог иметь и отображать свою статическую страницу, поскольку она остается здесь /var/www/project-name/. Но кажется, что эта строка кода всегда рассматривает последний аргумент как файл внутри /opt/nginx/html.   -  person Pirun Seng    schedule 12.06.2017
comment
все try_files пути связаны root. Внутри location / будет /var/www/project-name/static.html. Блок server не содержит директивы root, поэтому nginx дает внутренний /opt/nginx/html   -  person Deadooshka    schedule 12.06.2017


Ответы (2)


root путь в nginx указывает на каталог public.

Попробуйте код ниже:

server {
    listen 80;
    server_name mydomain.com *.mydomain.com;
    location / {
            root /var/www/project-name/public;
            passenger_enabled on;
    }
}
person puneet18    schedule 12.06.2017
comment
Я обновил свой вопрос. Изначально у меня есть index.html, как я описал выше. Я пытался добавить общедоступный каталог и иметь внутри него index.html, но все равно не повезло с этой ошибкой: /var/www/project-name/public/users/sign_in нет такого файла или каталога. - person Pirun Seng; 12.06.2017
comment
@PirunSeng попробуйте переместить файл index.html в папку public и повторите попытку. - person puneet18; 12.06.2017
comment
Я думаю, вы имеете в виду, что у меня должно быть что-то вроде этого: /var/www/project-name/public/index.html. У меня та же проблема, что и в предыдущем комментарии. - person Pirun Seng; 12.06.2017
comment
переместите файл index.html в общую папку и путь /var/www/project-name/public - person puneet18; 12.06.2017
comment
Я пробовал как ваше предложение, но не повезло. У меня есть этот файл /var/www/project-name/public/index.html и этот конфиг root /var/www/project-name/public; - person Pirun Seng; 12.06.2017

Я записываю ответ на всякий случай, если кто-то еще столкнется с такой же проблемой, как моя. Спасибо @Deadooshkha за то, что указал мне на решение. Я покажу два способа отрисовки статической страницы. Один находится в каталоге /opt/nginx/html, а другой — в каталоге root.

  1. Если вы хотите, чтобы ваша статическая страница (static.html) находилась внутри /opt/nginx/html

    server { 
        listen 80;
        server_name mydomain.com *.mydomain.com;
        location / {
            try_files $uri /static.html;
            passenger_enabled on;
        }
    }

  2. Если вы хотите, чтобы ваша статическая страница (static.html) находилась внутри корневого каталога /var/www/project-name

    server { 
        listen 80;
        server_name mydomain.com *.mydomain.com;
        root /var/www/project-name;
        location / {
            try_files $uri /static.html;
            passenger_enabled on;
        }
    }

person Pirun Seng    schedule 13.06.2017