2017-11-11 18 views
-5

가장 기묘한 기술 문제가 있습니다. 내 사이트는 잘 개발 된 상태에서 생산 과정에서 잘 작동했지만, 마지막 빌드에서는 정적 인 자산을 인식하지 못하게되었고 이전 버전의 파비콘을 거래에 사용하고 있습니다. 나는 전체 레포의 recloning을 시도했지만, 정확하게 똑같은 문제가 발생합니다. 오래된 파비콘은 더 이상 레포에 존재하지 않습니다. 내가 캐싱이 활성화되어,브런치 (Phoenix Framework)로 컴파일 된 정적 자산을 서버에서 볼 수 없습니다.

upstream phoenix { 
     server 127.0.0.1:4000; 
} 


# Default server configuration 
# 

server { 
     listen  80; 
     server_name haaksploits.com www.haaksploits.com; 
     return  301 https://$server_name$request_uri; 
} 

server { 
    # SSL configuration 
    listen 443 ssl http2; 
    listen [::]:443 ssl http2; 

     rewrite ^/(.*)/$ /$1 permanent; 

     server_name haaksploits.com wwww.haaksploits.com; 

     ssl_certificate /etc/letsencrypt/live/haaksploits.com/fullchain.pem; 
     ssl_certificate_key /etc/letsencrypt/live/haaksploits.com/privkey.pem; 
     ssl_dhparam /etc/nginx/ssl/dhparam.pem; 

     ssl_stapling on; 
     ssl_stapling_verify on; 

     access_log /var/log/nginx/sub.log combined; 

    root /var/www/haaksploits.com/html; 

    # Add index.php to the list if you are using PHP 
    index index.html index.php index.htm; 

    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; 

       # WebSockets 
       proxy_set_header Upgrade $http_upgrade; 
       proxy_set_header Connection "upgrade"; 

       proxy_pass http://phoenix; 

       include /etc/nginx/mime.types; 
    } 

     location ~ /.well-known { 
       allow all; 
     } 

     # Enable browser caching 

     location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { 
       expires 365d; 
     } 

     location ~* \.(pdf)$ { 
       expires 10d; 
     } 

    # pass PHP scripts to FastCGI server 

    location ~ \.php$ { 
     include snippets/fastcgi-php.conf; 

     # With php-fpm (or other unix sockets): 
     fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; 
    } 

} 

당신이 볼 수 있듯이, 그러나 나는 1 초에이 설정을 시도했다 :

나는 다음과 같은 설정으로, 카우보이 서버 프로세스의 앞에 nginx를 리버스 프록시를 그리고 도움이되지 않습니다. 어떤 경우 든 새로운 favicon 인 전에 업로드했는데 아무 문제없이 문제가 발생했습니다. 내 mix.exs :

defmodule Haaksploits.Mixfile do 
    use Mix.Project 

    def project do 
    [ 
     app: :haaksploits, 
     version: "0.2.3", 
     elixir: "~> 1.4", 
     elixirc_paths: elixirc_paths(Mix.env), 
     compilers: [:phoenix, :gettext] ++ Mix.compilers, 
     start_permanent: Mix.env == :prod, 
     aliases: aliases(), 
     deps: deps() 
    ] 
    end 

    def application do 
    [ 
     mod: {Haaksploits.Application, []}, 
     extra_applications: [:logger, :runtime_tools, :ueberauth, :ueberauth_google] 
    ] 
    end 

    defp elixirc_paths(:test), do: ["lib", "test/support"] 
    defp elixirc_paths(_),  do: ["lib"] 

    defp deps do 
    [ 
     {:phoenix, "~> 1.3.0"}, 
     {:phoenix_pubsub, "~> 1.0"}, 
     {:phoenix_ecto, "~> 3.2"}, 
     {:postgrex, ">= 0.0.0"}, 
     {:phoenix_html, "~> 2.10"}, 
     {:phoenix_live_reload, "~> 1.0", only: :dev}, 
     {:gettext, "~> 0.11"}, 
     {:cowboy, "~> 1.0"}, 
     {:ueberauth_google, "~> 0.2"}, 
     {:ja_serializer, "~> 0.11.2"}, 
     {:guardian, "~> 0.14.2"} 
    ] 
    end 

    defp aliases do 
    [ 
     "ecto.setup": ["ecto.create", "ecto.migrate", "run priv/repo/seeds.exs"], 
     "ecto.reset": ["ecto.drop", "ecto.setup"], 
     "test": ["ecto.create --quiet", "ecto.migrate", "test"] 
    ] 
    end 
end 

그리고 내 prod.exs :

use Mix.Config 

config :haaksploits, HaaksploitsWeb.Endpoint, 
    http: [port: 4000], 
    url: [host: "haaksploits.com", port: 80], 
    cache_static_manifest: "priv/static/cache_manifest.json", 
    server: true, 
    code_reloader: false 

config :logger, level: :info 

import_config "prod.secret.exs" 

내가 생각할 수있는 유일한 다른 점은 마지막 빌드에서 문제가 증류소이었다라는 오류가 발생했습니다 발생하기 전에이다 누락되었으므로 빌드를 완료하기 위해 다시 추가했습니다. 나는 그 당시에는 Distillery와 Edeliver를 제거했는데, 문제가 사라지지는 않지만, 파일에 어떤 일이 일어나면 서버가 잘못 보이는지 궁금하다. 자산의 위치.

이 경우 필자는 증류주가이 파일을 찾는 위치를 알고 있어야하며 피닉스를 다시 정적 자산의 올바른 위치에서 찾는 방법을 알고 있어야합니다. 또는 액세스가 차단 된 경우 파일에 대한 액세스를 허용합니다.

/priv/static을 보면 모든 파일이 있어야합니다.

업데이트 :

내가 nginx를하지 않고 시스템에서 테스트했습니다 피닉스/증류소 문제가 될 것 같지 않습니다 만의 nginx의 설정과 함께 할 수있는 뭔가 ... 그래서 아마도 캐싱 문제 후 모든 ........

업데이트 :

완전히 방정식에서 nginx를 찍을 때 여전히 실패로 문제가 아니었다. 브런치 또는 양조장을 사용하여 릴리스를 빌드 할 때도 실패하지만, 두 개의 프로덕션 서버 (하나의 데비안, 하나의 우분투)에서만 실행되며 내 개발 Mac에서는 그렇지 않습니다. 내 env 빌드에 tarball을 scping하여 직접 제작 환경에 구축하려고합니다.

업데이트 :

타르볼 솔루션으로 인해 개발 기계 및 생산 기계 사이의 구조적 차이로 실패합니다. 우회하는 데 에델 베리 아를 사용하려고합니다.

업데이트 : 프로세스가 IP 주소에서 직접 액세스 할 때

가 잘 동작하는 것, 그래서 내가 생각할 수있는 남아있는 유일한 것은 그 무언가가 도메인 이름 확인 단계 사이에서 잘못된거야입니다이며, 정적 자산에 대한 액세스. edeliver 솔루션을 떠나 Cloudflare를 사용하는 대신 도움이되는지 확인하십시오.

답변

-2

소스 (내 주 서버의 경우 적어도 다른 문제에 동일한 오류가 발생하여 이상하게 보였지만 이상하게 보였습니다.) 문제의 원인이 SSL 인증서를 사용하여 문제가 발생했습니다. 일부 콘텐츠 (???) 만 액세스가 차단되었습니다.

모든 nginx 설정을 지우고 모든 certbot SSL 설정을 제거하고 Cloudflare 사이트에 서명하고 대신 SSL 서비스를 활성화했습니다. 이 문제가 해결되었습니다.