가장 기묘한 기술 문제가 있습니다. 내 사이트는 잘 개발 된 상태에서 생산 과정에서 잘 작동했지만, 마지막 빌드에서는 정적 인 자산을 인식하지 못하게되었고 이전 버전의 파비콘을 거래에 사용하고 있습니다. 나는 전체 레포의 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를 사용하는 대신 도움이되는지 확인하십시오.