2016-07-06 16 views
1

NginxをPhoenixアプリケーションに移行するためにWebソケットを設定しようとしていますが、403エラーが発生し続けます。誰もが生産のこの仕事をするために正しい設定を助言することができます - 開発envは正常です。Nginxの後ろにPhoenixを使ってWebソケットを設定する方法は?

私のnginxのconfに:

upstream phoenix { 
    server 127.0.0.1:4000 max_fails=5 fail_timeout=60s; 
} 

server { 
    server_name <app-domain>; 
    listen 80; 

    location/{ 
    allow all; 

    # Proxy Headers 
    proxy_http_version 1.1; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header Host $http_host; 
    proxy_set_header X-Cluster-Client-Ip $remote_addr; 

    # The Important Websocket Bits! 
    proxy_set_header Upgrade $http_upgrade; 
    proxy_set_header Connection "upgrade"; 

    proxy_pass http://phoenix; 
    } 
} 

私prod.exsはCONF:

use Mix.Config 

config :logger, level: :info 
config :phoenix, :serve_endpoints, true 

config :app, App.Endpoint, 
    http: [port: 4000], 
    url: [host: "127.0.0.1", port: 4000], 
    root: '.', 
    cache_static_manifest: "priv/static/manifest.json", 
    server: true 

config :app, App.Repo, 
    username: System.get_env("MONGO_USERNAME"), 
    password: System.get_env("MONGO_PASSWORD"), 
    database: "template", 
    hostname: "localhost", 
    pool_size: 10 

必要に応じて要求されたとして、私は任意の追加情報を提供することができます。

アプリケーションはドメイン名を超えて正常に到達することができ、残っている問題はWebソケットが機能しているだけです。

私は正しい方向で私を指すことができる誰にも多くのおかげです。

答えて

2

私はphoenixサイトのガイドに従っています。あなたのnginx.configこの不足している Exrm Releases - Phoenix

# The following map statement is required 
# if you plan to support channels. See https://www.nginx.com/blog/websocket-nginx/ 
map $http_upgrade $connection_upgrade { 
    default upgrade; 
    '' close; 
} 

を船の後、私のローカルマシンでリリース私のサーバーへの放出を生成するとき、私はまた、いくつかのエラーが発生しました。

サーバー環境内でリリースを生成することをお勧めします。

編集:ブラウザのコンソールで

エラー:

ws://phoenix.hollyer.me.uk/socket/websocket?token=&vsn=1.0.0' failed: Error during WebSocket handshake: Unexpected response code: 403

これは、このerror.Youがサーバー内のあなたのコンソールを起動しようとする必要があり、おそらくです:

[error] Could not check origin for Phoenix.Socket transport. 

This happens when you are attempting a socket connection to 
a different host than the one configured in your config/ 
files. For example, in development the host is configured 
to "localhost" but you may be trying to access it from 
"127.0.0.1". To fix this issue, you may either: 

    1. update [url: [host: ...]] to your actual host in the 
    config file for your current environment (recommended) 

    2. pass the :check_origin option when configuring your 
    endpoint or when configuring the transport in your 
    UserSocket module, explicitly outlining which origins 
    are allowed: 

     check_origin: ["https://example.com", 
         "//another.com:888", "//other.com"] 

ホストを再設定することができます:

[url: [host: "http://www.phoenix.hollyer.me.uk"]] 

いずれかを渡す:

check_origin: ["http://www.phoenix.hollyer.me.uk"] 

をそしてあなたを助けるagain.Hopeを展開しよう:あなたのエンドポイントconfigまたはUserSocketモジュールにオプションをcheck_origin!

+0

はい、私は地図の文を忘れました。だから、私はそのドメインのnginxのconfに追加してnginxを再起動しても、同じエラーが発生します。私はサーバーの構成と一致する迷惑メールのVMを持っていて、exrmのリリースをビルドしています。ビルドの問題があれば、私はそれにアクセスすることはできません。正確な問題はここにある[link](phoenix.hollyer.me.uk)です。連絡先ページにアクセスしてブラウザのコンソールを確認するとエラーが表示されます。 –

+0

正しいmdリンク:[link](http://phoenix.hollyer.me.uk/contact) –

+0

私は答えを編集しました。 – TheAnh

関連する問題