2014-11-06 2 views
3

내 응용 프로그램은 Flask-Socketio, Flask 및 nginx를 사용합니다. 모든 HTTPS에서 HTTPS 로의 처리는 Application Server 레벨이 아닌 Web Server 레벨에서 수행되어야한다는 게시물을 읽었습니다. rewrite 속성을 사용하여 모든 HTTP 요청을 HTTPS 요청으로 리디렉션했습니다. 이것은 정적 페이지에서 성공적으로 작동합니다. 그러나 동적 콘텐츠를로드하려고하면 The page at 'https://localhost/myLoc' was loaded over HTTPS, but displayed insecure content from 'http://localhost/myLoc/more/paths?t=1390397': this content should also be loaded over HTTPS.이라는 오류가 발생합니다. Flask, Flask-SocketIO 및 nginx를 사용하여 SSL (http to https)을 구현하는 방법

는 또한 또한 XMLHttpRequest cannot load http://localhost/myLoc/more/paths?t=1390397. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://localhost' is therefore not allowed access.

내 nginx.conf 파일이

server { 
    server { 
    listen  80; 
    server_name _; 
    rewrite^https://$host$request_uri? permanent; 
} 

server { 
    gzip on; 
    ssl  on; 
    listen 443 ssl; 

    server_name  *.mydomain.com; 

    ssl_certificate /path/to/nginx/ssl/nginx.crt; 
    ssl_certificate_key /path/to/nginx/ssl/nginx.key; 

    location /myLoc { 
      proxy_pass http://localhost:9001/myLoc; 
      proxy_redirect off; 
      proxy_buffering off; 

      proxy_set_header Host $host; 
      proxy_set_header X-Real-IP $remote_addr; 
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    } 
} 

도와주세요 모양이 오류가 발생합니다. Flask-SocketIO는 인증서와 키의 경로도 포함해야합니까?

+0

jQuery와 같은 타사 컨텐츠를로드하고 있습니까? – dirn

+0

콘텐츠를 어떻게 참조하고 있습니까? 'http : // localhost/myLoc/more/paths? t = 1390397'에서 리소스를 명시 적으로 가져올 수있는 것처럼 보입니다 (예 :'/ myLoc/more/paths? t = 1390397 ') 또는 프로토콜에 의존하지 않는다 (예 :'/ localhost/myLoc/more/paths? t = 1390397'); 이상적으로, 이것은 하드 코드 대신에'url_for'를 사용하여 수행되어야합니다. 또한 위치 블록에'X-Forwaded-Proto' 헤더를 설정하고 [This answer] ('https://stackoverflow.com/questions/23347387/x-forwarded-proto- 플라스크). – jonafato

+0

@dim : 예 dim, 우리는 JavaScript와 jQuery를 사용하고 있습니다 –

답변

0

이 시도 :

location /myLoc { 
     proxy_pass https://localhost:9001/myLoc; 
     proxy_redirect off; 
     proxy_buffering off; 
     proxy_set_header Host $host; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     add_header Access-Control-Allow-Origin *; 
} 

그러나 HTTPS 오프로드는 방법, proxy_pass에 http를 선호하는 것입니다 : // 지시어는 더 은 가능한 한 빨리와 밀접한 관계와 같은 백엔드에서 응답을 얻을 수 Nginx에 도움이됩니다. 유일한 요구 사항은 백엔드 (포트 9901을 수신 대기)가 HTTP를 처리하도록하는 것입니다.

+0

이것은 작동하지 않습니다. 나는 그것을 일찍 시도했다. –

+0

로그를 제공 할 때까지 작동하지 않습니다 – Anatoly

+0

로그를 제공하십시오? – Anatoly

관련 문제