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