| -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)> |