Настройка мультисайта с помощью nginx - PullRequest
0 голосов
/ 02 апреля 2019

Возникли проблемы с настройкой следующей настройки с помощью nginx:

  • example.com
  • example.com / gb / en

Этосайты laravel и gb / en - это первое из того, что будет добавлено.Root работает с obvs, но я не могу заставить / gb / en указать папку / gb / en / public.

Я пробовал несколько вещей, но это мой текущий файл conf:

server {
    listen 80;
    listen [::]:80;
    server_name www.example.com;
    root /home/forge/www.example.com/public;

    ssl_protocols TLSv1.2;
    ssl_ciphers TEST;
    ssl_prefer_server_ciphers on;
    ssl_dhparam /etc/nginx/dhparams.pem;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    index index.html index.htm index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location /gb/en {
        root /home/forge/www.example.com/gb/en/public;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    access_log off;
    error_log  /var/log/nginx/www.example.com-error.log error;

    error_page 404 /index.php;

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

Вы можете видеть там блок моего местоположения, который я пробовал различными способами, но безрезультатно.

Любая помощь будет принята с благодарностью.

РЕДАКТИРОВАТЬ:

Итак, я стал на шаг ближе, когда понял, что подпапки в URL также добавляются в корневой каталог:

location /gb/en/ {
    root /home/forge/www.example.com/public;
    try_files $uri $uri/ /public/index.php?url=$uri;
}

Итак, мои файлы находятся в / public / gb /ru / public, но приведенное выше разрешается в /public/gb/en/index.php

Как мне получить / gb / en / для разрешения public / gb / en / public / index.php?

Большое спасибо;)

РЕДАКТИРОВАТЬ:

Идея пришла ко мне внезапно - используйте символическую ссылку!Я поместил / gb / en в общую папку в отдельной папке, и это сработало;)

Ответы [ 2 ]

0 голосов
/ 14 апреля 2019

В конце я использовал символическую ссылку для достижения этой цели. Я сделал ссылку / gb / en на общую папку в другом месте, и она сделала то, что мне было нужно;)

РЕДАКТИРОВАТЬ - позже я обнаружил, что у этого также были проблемы с подстраницами, но потом нашел этот пример, и это помогло достичь того, чего я хотел в первую очередь https://gist.github.com/noeldiaz/08a1211a7c47f21f7083

0 голосов
/ 02 апреля 2019

Я бы предложил скопировать строку try_files в блок /en/gb.В этой папке или на сайте вы не указываете расширения, которые хотели бы использовать, как в том, который работает.

Попробуйте:

location /gb/en {
    root /home/forge/www.example.com/gb/en/public;
    try_files $uri $uri/ /index.php?$query_string;
}

Однако, если содержимое /en/gb связано с сайтом, лучше настроить его непосредственно в Laravel.

...