1

私は、backbonejsアプリケーションとAPIサーバーで動作するようにnginxをセットアップしようとしています。

APIサーバーは外部にあり、https: //website.com/api/を介してルーティングされています...

基本的に、バックボーンアプリが処理できるように、一致しないURLを/index.htmlにルーティングする必要があります。

を使用してみましtry_filesたが、APIが上書きされるだけです。registerリクエストがGETであるかどうか、また、またはloginまたはと一致しないかどうかを確認する別の場所を設定しようとしましたapiが、それも機能しません。これが私のserverこれまでのところです:

server {
    listen 80; ssl off;
    listen  443 ssl;
    server_name app.io;
    ssl_certificate /etc/nginx/conf/ssl.crt;
    ssl_certificate_key /etc/nginx/conf/app.key;

    root /home/ubuntu/app/public;

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

    index index.html;

    location / {
                    if ($scheme = "http") {
                            rewrite ^ https://$http_host$request_uri? permanent;
                    }
            }

    location ~ ^/(api)|(auth).*$ {
        proxy_set_header X-Forwarded-Host $host;
            proxy_set_header X-Forwarded-Server $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
        proxy_pass https://app.aws.af.cm;
    }

    location ~ ^(/(register)|(login)).*$ {
        proxy_set_header X-Forwarded-Host $host;
                    proxy_set_header X-Forwarded-Server $host;
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        # GETs only
        limit_except POST {
            proxy_pass https://app.aws.af.cm;
        }
    }

    location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
        expires max;
        add_header Cache-Control "public, must-revalidate, proxy-revalidate";
    }

}

現在、try_filesはAPIをオーバーライドし、index.htmlにリダイレクトするだけです。どうすればすべてを互いにうまくプレイできるようになるのでしょうか?

これが私が欲しいものです:

if / - /index.html
else if /api/*|/auth/* - external proxy
else if /login|/register - POST - external proxy
else /* - /#$1
4

1 に答える 1

0

理解した:

以下の関数に追加try_files @uri @rewrites;Location /、さらに追加し@rewritesます。

server {
    listen 80; ssl off;
    listen  443 ssl;
    server_name app.io;
    ssl_certificate /opt/nginx/conf/ssl.crt;
    ssl_certificate_key /opt/nginx/conf/app.key;

    root /home/ubuntu/app/public;

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

    index index.html;

    location / {
                    if ($scheme = "http") {
                            rewrite ^ https://$http_host$request_uri? permanent;
                    }

                               try_files $uri @rewrites;
            }

    location ~ ^/(api)|(auth)|(logout)|(register)|(login).*$ {
        proxy_set_header X-Forwarded-Host $host;
            proxy_set_header X-Forwarded-Server $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
        proxy_pass https://app.cm;
    }

    location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
        expires max;
        add_header Cache-Control "public, must-revalidate, proxy-revalidate";
    }

    location @rewrites {
            rewrite ^/.+ /#$uri redirect;
    }

}
于 2013-02-03T00:08:04.370 に答える