-372,6 +372,68 |
Mojo::Log를 사용한 로그는 표준에러로 나오는데, 만일 <code>log</code> 디렉토리가 있다면 그 디렉토리 아래에 <code>현재모드.log</code> 파일에 기록된다. 어느 순간 화면에 로그가 나오지 않아 당황했는데 파일로 기록되고 있었음. 이때 log 디렉토리는 "현재 작업 디렉토리" 아래가 아니라, 앱 스크립트가 있는 디렉토리 아래에 있어야 적용되더라. |
== # 리버스 프록시를 쓸 때 URL 프로토콜 반영 == |
Nginx를 리버스 프록시로 사용해서 그 위에서 Mojo 앱이 실행되는데, 웹브라우저-Nginx간은 HTTPS를 쓰는데 모조 앱에서 `url_for(..)->to_abs`를 해보면 프로토콜이 http로 나오는 문제가 있었다. 모조 앱 입장에서는 프록시와 자신간의 연결이 그냥 http 라서. 이것은 `redirect_to`등 URL을 자동으로 생성해주는 루틴들에 공히 적용되는 듯. |
해결책: |
Nginx 쪽에서는 `X-Forwarded-Proto` 헤더를 써서 현재 프로토콜을 앱으로 전달한다. |
{{{#!vim |
upstream ssltest { |
server 127.0.0.1:9000; |
} |
server { |
listen 80; |
listen 443 ssl; |
server_name ssltest.server.com; |
location / { |
proxy_pass http://ssltest/; |
proxy_set_header Upgrade $http_upgrade; |
proxy_set_header Connection "upgrade"; |
proxy_set_header Host $host; |
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 이것과 |
proxy_set_header X-Forwarded-Proto $scheme; # 이것 |
} |
} |
}}} |
이것을 모조 앱 쪽에서 이용해야 하는데, |
앱을 실행하는 데 Hypnotoad 를 쓴다면(나는 안 써봤지만) |
* http://mojolicious.org/perldoc/Mojo/Server/Hypnotoad#proxy |
* http://mojolicious.org/perldoc/Mojolicious/Guides/Cookbook#Hypnotoad |
{{{#!vim |
proxy => 1 |
# myapp.conf |
{hypnotoad => {proxy => 1}}; |
}}} |
앱을 실행하는 데 Plack을 쓴다면 |
* http://mojolicious.org/perldoc/Mojolicious/Guides/Cookbook#PSGI-Plack |
{{{#!vim |
MOJO_REVERSE_PROXY=1 plackup ./script/my_app |
}}} |
실행 환경 쪽을 손대지 않고 앱 자체에서 넘어온 헤더값을 반영하는 경우는 |
* http://mojolicious.org/perldoc/Mojolicious/Guides/Cookbook#Rewriting |
* https://stackoverflow.com/questions/47009434/how-to-make-mojoliciouss-url-for-to-abs-return-correct-scheme-http-or-htt |
{{{#!vim |
hook 'before_dispatch' => sub { |
my $c = shift; |
$c->req->url->base->scheme( $c->req->headers->header('X-Forwarded-Proto')) |
if $c->req->headers->header('X-Forwarded-Proto'); |
}; |
}}} |
== # Comments == |
<div class="comments"> |
<longcomments(100)> |