도메인 이름없이 여러 앱 (Laravel 포함)에 대해 NGINX를 구성하는 방법


0

VPS에 Ubuntu를 설치했습니다. 도메인 이름이 없으므로 https : // IP : port 통해 모든 콘텐츠에 액세스 할 수 있습니다 . ip / name을 통해 액세스 된 여러 웹 응용 프로그램을 실행하도록 nginx를 구성하려고했습니다.

여기 내 구성입니다

server {

    listen 443 ssl;

    error_log /var/log/nginx/nginx_error.log;

    ssl_certificate /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key;

    set $root_path '/var/www/html';
    root $root_path;

    # Add index.php to the list if you are using PHP
    index index.html index.htm index.nginx-debian.html index.php;

    server_name localhost;

    # handle static files within project.. break at end to avoid recursive redirect
    location ~ app3/((.*)\.(?:css|cur|js|jpg|jpeg|gif|htc|ico|png|html|xml))$ {
            rewrite app3/((.*)\.(?:css|cur|js|jpg|jpeg|gif|htc|ico|png|html|xml))$ /app3/$1 break;
    }

    location /app3 {
        rewrite ^/app3(.*)?$ /app3/pathto/public/index.php?$1 last;
    }


    location / {
        try_files $uri $uri/ =404;
    }


    location /app1 {
        try_files $uri $uri/ /index.php;
    }

    location /app2 {
        try_files $uri/ /index.php;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        #try_files $uri $uri/ =404;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_nam
    }
}

이것은 app1과 app2에 잘 작동합니다. App3 (Laravel 앱)은 상대 경로 대신 절대 URL을 사용하기 때문에 올바르게 실행할 수 없습니다. 따라서 / app3 / pathto / public /. 대신 / api ..에 대한 404 요청을 얻습니다 (상대 경로로 app3 포크를 시도했지만 일부 이미지 및 글꼴이 표시되지 않는 경우 모두 잘 실행됩니다)

app3에 자체 루트 폴더가 있도록 nginx를 구성하는 방법은 무엇입니까? app3 위치의 루트 또는 별칭 지시문이 제대로 작동하지 않습니다.

감사 !

답변:


1

귀하의 질문은 app3에 자체 루트 폴더를 제공하는 것과 관련이 있으며 그 단계는 쉽습니다. 만큼 당신이 함정을주의, 당신은 해야한다 이와 괜찮을. http://wiki.nginx.org/Pitfalls#Root_inside_Location_Block

그러나 나는 그것이 당신의 문제를 실제로 해결할 것이라고 생각하지 않습니다. 귀하의 문제는 Laravel 응용 프로그램은 하위 폴더 내에서 작동 할 수없는 것 같다, 또는 그것은 단순히 실행하도록 구성되지 않았 음. 이 문제를 해결하기 위해 nginx 수준에서 할 일이별로 없습니다. 그러나 구성에 앱 구성에 대한 도움말이 있는지 확인하십시오.

대체 "솔루션"은 루트에 app 3의 리소스 (api /, img / 등)를 설치 (또는 다시 작성)하고 대신 앱 1과 2 만 다시 작성하는 것입니다. 가장 우아한 솔루션은 아니지만 Laravel 앱에 app1 또는 app2라는 폴더가 없으면 작동해야합니다.

편집 : 세 번째 옵션, 아마도 가장 좋은 방법은 물론 도메인 이름으로 1 년에 $ 10 정도를 껍질을 벗기거나 무료 DNS 서비스에서 무료 하위 도메인을 얻는 것입니다. 그런 다음 app3에 대해 별도의 도메인 (또는 하위 도메인)을 가질 수 있습니다. 무료 DNS 서비스에 대한 경험이 없지만 도움이 될 것입니다.

https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=free+domain+names+with+dns


위치 블록에 자체 루트를 제공하는 것이 쉽다는 것을 알고 있습니다. 그러나 루트 또는 별칭으로 작동하지 않았습니다. 당신이 말했듯이 문제는 Laravel 앱에서 처음 나온 것입니다. 대체 솔루션은 내가 현재이 시도하고 난 단지 하나의 Laravel 응용 프로그램을 실행하면 (지금의 경우 어느하지만 ..) .. 작동합니다 : stackoverflow.com/questions/28531288/...를 하지만 같은 문제가 증가하고있다 ... 내가했다 마지막 해결책에 대해 생각하면 가장 좋습니다. 먼저 무료 DNS 서비스에 대한 정보를 수집해야합니다.
Lich4r
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.