도메인 이름없이 여러 앱 (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.