2016-03-22 5 views
1

問題:組み込みEmberアプリケーションから本番ノードAPIへのAPIコールをプロキシしようとすると内部サーバーエラーが発生し、CentOS上で.htaccessがApacheで発生します。エンバーCLI 1.1.15を使用したEmberのCLIがApacheサーバ上のSails.js APIと対話する問題を持っています

Enviroments.jsファイル:

var ENV = { 
modulePrefix: 'va-loans-frontend', 
environment: environment, 
baseURL: '/', 
locationType: 'auto', 
host: 'http://localhost:1337/api', 
... 

if (environment === 'production') { 
    ENV.host = "http://example.com:80/api"; 
} 

home/example/public_html

Options FollowSymLinks 
RewriteEngine on 

#redirect all page requests to main index 
#RewriteCond %{REQUEST_URI} !^(index\.html|robots\.txt|img|font|js|css|scripts|action/.*) [NC] 
RewriteRule ^api/ http://example.com:8080/ [P, L] 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^?]*)$ /index.html [NC,L,QSA] 
#ProxyPassReverse /api http://example.com:8080/ 

RewriteCondProxyPassReverseがコメントアウトされているに位置して.htaccessファイルは、私はちょうどしようとしています特定の行を単純化し除外する)

私はまた、proxypassのルールを持つ仮想ホストを使用して、サイコロなしで内部を書き直そうとしました。

最初にRewriteRule ^api/*をコメントアウトすると、apacheが私のemberアプリケーションを提供し、ページのリダイレクトも正しく行われますが、すべてのAPI呼び出しはindex.htmlにリダイレクトされます。

私のsails.jsサーバーは、ポート8080でリッスンするように設定されており、pm2でプロダクションモードで実行されています。私の作成したember-cliプロジェクトは、私の/public_htmlフォルダーにあり、そのように見えます。

assets/, crossdomain.xml, .htaccess, index.html, robots.txtのようになります。

夏らしい:Apacheはindex.htmlを果たす(私の建て燃えさし-CLIアプリ)となるように燃えさしがルーティングを処理することができますindex.html/api/が含まれていない任意のURLリクエストをリダイレクトしています。 を実行するには/api/が含まれているリクエストはport 8080にプロキシする必要があります。ここでは、私のsails.jsノードAPIが存在し、そこで処理されて最終的にJSONを私のemberアプリケーションに戻します。

+0

私は実際に1週間この状態になりました。これは、私の17回目の '.htaccess'ファイルの繰り返しのようなものです。 – Ryan

答えて

1

私はついにこれを回避する方法を見つけました。それを回避する方法は、中間者としてApacheを削減することでした。

.htaccessファイルを完全に削除し、iptablesを使用してポート80からポート8080へのリダイレクトを行いました。

次に、構築したemberアプリケーションをセイル内のassetsフォルダに移動し、ルーティングファイルの最後に次のルートをsails/configに追加しました。

'/*': { 
     controller: 'App', 
     action: 'serve', 
     skipAssets: true, 
     skipRegex: /^\/api\/.*$/ 
    }, 

そして、私のsails/api/controllers/AppController.jsファイルには、次のようになります。

module.exports = { 
    serve: function(req, res){ 
     res.sendfile(directory_path_to_my_project + '/assets/index.html'); 
    } 
}; 

そしてもちろんの

は、すべて私のルートは事前保留 /apiであり、これは完全にこれまで取り組んできたようです。

私が読んだ後、この溶液に来た:他の多くの場所herehereherehere、およびhereと、多くの。

関連する問題