Nginx, server, два location

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
miha
Сообщения: 15
Зарегистрирован: 2014.05.09, 04:11

Nginx, server, два location

Сообщение miha »

Шаблон Advanced app (Yii2) предполагает отдельные настройки нгинкса для каждого приложения в проекте. Когда я выносил backend на поддомен проблем не возникало (делал два раздела server в конфиге), но сейчас, в связи со спецификой проекта, появилась потребность разместить backend в поддиректории (т.е. domain.com/backend).

Чтобы акцентировать внимание на сути проблемы, свожу все к работе со статикой:

Код: Выделить всё

server {
	server_name domain.com;
	
	location / {
		root /home/miha/domain.com/frontend/web;
	}
	
	location /backend/ {
		root /home/miha/domain.com/backend/web;
	}
}
domain.com/css/site.css - тут все ок, отдает цсску
domain.com/backend/css/site.css - 404 Not Found

Файл /home/miha/domain.com/backend/web/css/site.css существует, права на чтение есть.
Что можно с этим сделать?
miha
Сообщения: 15
Зарегистрирован: 2014.05.09, 04:11

Re: Nginx, server, два location

Сообщение miha »

Нашел решение: http://stackoverflow.com/questions/1157 ... -subdomain
server {
   server_name domain.com;
   
   location / {
      root /home/miha/domain.com/frontend/web;
   }
   
   location /backend {
      alias /home/miha/domain.com/backend/web;
   }
klay
Сообщения: 4
Зарегистрирован: 2014.05.10, 15:07

Re: Nginx, server, два location

Сообщение klay »

И оно работает? А если try_files добавить в каждый location то как оно должно выглядеть?

Я пробовал вот так (не работает):

Код: Выделить всё

server {
    listen        80;
    server_name   yii2.lo;
    server_tokens off;

    client_max_body_size 128M;
    charset       utf-8;

    access_log    /var/log/nginx/yii2-access.log main buffer=50k;
    error_log     /var/log/nginx/yii2-error.log notice;

    set           $host_path      "/srv/http/yii2/public";
    set           $yii_bootstrap  "index.php";

    root          $host_path/frontend/web;
    index         $yii_bootstrap;

    location / {
        try_files $uri $uri/ /$yii_bootstrap?$args;
    }

    location /admin {
        try_files $uri $uri/ /backend/web/$yii_bootstrap?$args;
        rewrite ^ /backend/web/$yii_bootstrap?$args break;
    }

    location ~ \.php$ {
        try_files $uri =404;

        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_index           $yii_bootstrap;

        # Connect to php-fpm via socket
        fastcgi_pass unix:/run/php-fpm/php-fpm.sock;

        fastcgi_connect_timeout     30s;
        fastcgi_read_timeout        30s;
        fastcgi_send_timeout        60s;
        fastcgi_ignore_client_abort on;
        fastcgi_pass_header         "X-Accel-Expires";

        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        fastcgi_param  PATH_INFO        $fastcgi_path_info;
        fastcgi_param  HTTP_REFERER     $http_referer;
        include fastcgi_params;
    }

    location ~* \.(js|css|less|png|jpg|jpeg|gif|ico|woff|ttf|svg|tpl)$ {
        expires 24h;
        access_log off;
    }

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

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

    location ~ /\. {
        deny all;
        access_log off;
        log_not_found off;
    }
}
Пробовал собственный root для каждого location, пробовал alias, пробовал для server указать один root, а для /admin другой — никак не работает именно адрес /admin.
Решил проблему только поддоменом: https://gist.github.com/c045185b77ad5fa44b55
vlvladimir
Сообщения: 17
Зарегистрирован: 2014.07.01, 19:02

Re: Nginx, server, два location

Сообщение vlvladimir »

та же проблема
domain.local/admin - работает с ниже показаным конфигом,
но не работает уже domain.local/admin/posts
если в секции location /admin забрать обработку аргументов ($args)
то domain.local/admin/posts будет работать
### (конечно же без передачи get параметров)

Код: Выделить всё

server {
  listen                *:80;

  server_name           domain.local www.domain.local;
  client_max_body_size 1m;

  root /var/www/domain;
    index  index.html index.htm index.php;

  access_log            /var/log/nginx/nxv_uvxwv1p8zay1.access.log;
  error_log             /var/log/nginx/nxv_uvxwv1p8zay1.error.log;

  location ~ \.php$ {

    root  /var/www/domain/frontend/web;
    fastcgi_index index.php;
    fastcgi_split_path_info ^(.+\.php)(/.*)$;
    try_files $uri $uri/ /index.php$is_args$args;
    include /etc/nginx/fastcgi_params;
    fastcgi_pass 127.0.0.1:9000;

    fastcgi_param SCRIPT_FILENAME $request_filename;
    fastcgi_param APP_ENV dev;

  }
  location / {

    root  /var/www/domain/frontend/web;
    try_files $uri $uri/ /index.php$is_args$args;
    index  index.html index.htm index.php;


  }
    location ^~ /admin {

    alias  /var/www/domain/backend/web;
    try_files $uri $uri/ /admin/index.php$is_args$args;
    index  index.html index.htm index.php;

            location ~ \.php$ {


            include /etc/nginx/fastcgi_params;
            fastcgi_pass 127.0.0.1:9000;

            fastcgi_param SCRIPT_FILENAME $request_filename;
            fastcgi_param APP_ENV dev;

        }
  }
  sendfile off;
}

mickgeek
Сообщения: 957
Зарегистрирован: 2014.05.31, 20:50
Откуда: Санкт-Петербург
Контактная информация:

Re: Nginx, server, два location

Сообщение mickgeek »

vlvladimir
Сообщения: 17
Зарегистрирован: 2014.07.01, 19:02

Re: Nginx, server, два location

Сообщение vlvladimir »

спасибо, решено!
Ответить