1

Nginx를 통해 Phoenix 앱으로 이동하지만 403 오류가 계속 발생하도록 웹 소켓을 설정하려고합니다. 누구나 생산 환경에서 올바르게 작동하도록 올바른 구성을 조언 할 수 있습니까?Nginx 뒤에 Phoenix가있는 웹 소켓을 설정하는 방법은 무엇입니까?

내 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 

내가 어떤 추가 정보를 제공 할 수 있습니다.

응용 프로그램이 도메인 이름을 통해 정상적으로 도달 할 수 있으며 마지막 문제는 웹 소켓이 작동하는 것입니다.

나를 올바른 방향으로 안내 할 수있는 사람에게 많은 감사를드립니다.

답변

2

나는 phoenix 사이트의 가이드를 따른다. Exrm Releases - Phoenix

귀하의 nginx.config이 누락되었습니다 선박 후 내 서버에 자료를 내 로컬 컴퓨터에서 자료를 생성 할 때

# 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; 
} 

내가 일부 오류가 있었다.

그래서 서버 환경 내에서 릴리스를 생성해야합니다.

편집 : 브라우저 콘솔에서

오류 :

[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"] 

:

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

이것은 아마도이 error.You는 서버 내부에 콘솔을 시작하려고한다입니다 호스트를 다시 구성 할 수 있습니다.

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

중 하나를 통과 :

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

을 그리고 당신을 도와 again.Hope를 배포하려고 : 엔드 포인트 설정 또는 UserSocket 모듈에 옵션을 check_origin!

+0

예, 맵 문을 놓쳤습니다. 그래서 그 도메인에 대한 nginx conf에 추가하고 nginx를 다시 시작했지만 여전히 같은 오류가 발생합니다. 나는 서버 구성과 일치하는 exrrm 배포판을 작성하고, 빌드 문제가있는 경우 모든 경우에 액세스 할 수 없을 것입니다. 정확한 문제는 여기 [link] (phoenix.hollyer.me.uk)에서 확인할 수 있습니다. 연락처 페이지로 이동하여 브라우저 콘솔을 확인하면 오류가 표시됩니다. –

+0

올바른 md 링크 : [link] (http://phoenix.hollyer.me.uk/contact) –

+0

답변을 편집했습니다. – TheAnh