アーカイブ - 11月, 2013



2013年 11月 6

追記(解決編)

という事で、検証して頂きまして、うまくいかない原因が判明しました。以下のgistが最高に参考になります。@hayajo++

素晴らしいgist

以下原文


SSL専用のページとどちらでもいいページとSSLでアクセスして欲しくないページをrouterのところで出来れば楽だと考えて、試行錯誤してみたけどなかなかうまく行きません。

以前の記事

結論から言うとHTTP -> HTTPSの場合はなんとかうまくいきます。が、HTTPS -> HTTPの場合はどうしてもうまくいかない。

redirect_toメソッドでリダイレクトする場合、同ホスト・同じpathに限りLocationヘッダに設定されるURLがなぜかhttpsとなってしまう = リダイレクトが無限ループする。…なぜだ??

なので、mataタグを使ったリダイレクトでその場しのぎをしてみます。

Nginxの設定

proxy_set_header X-Forwarded-HTTPS を使えばいいのではとコメント頂いて助かりました。ただ、proxy_set_header X-Forwarded-HTTPS 1(on);とかだと常にHTTPSの通信と伝えられてしまうみたいなので、

  location / {
          if ($scheme = "https"){
              set $mode "on";
          }
          proxy_set_header X-Forwarded-HTTPS $mode;
  }

のように条件式を入れて使っています。

リダイレクト用 テンプレートを用意する

HTTPS -> HTTP にリダイレクトする場合にどうしてもうまくいかないのでリダイレクト用のテンプレートを使います。

<head>
  <meta http-equiv="refresh" content="0;url=<%= $self->req->url->to_abs->scheme('http') %>">
</head>

mojolicious

sub startup {
  $self = shift;
....

  # Routes
  my $routes = $self->routes;

  # SSL onry
  my $ssl_rotes = $routes->under(
    sub{
      my $self = shift;
      return 1 if $self->req->is_secure;
      $self->redirect_to($self->req->url->to_abs->scheme('https'));
    }
  );

  # http onry
  my $not_ssl_routes = $routes->under(
    sub{
      my $self = shift;
      return 1 if !$self->req->is_secure;
      # $self->redirect_to($self->req->url->to_abs->scheme('http')); # これだとリダイレクトが無限ループする
      $self->render(template =>'redirect');
    }
  );

  # SSL onry route
  $ssl_rotes->route('/login')->to('login#index');
  $ssl_rotes->route('/join')->to('join#index');

  # not SSL routes
  $not_ssl_routes->route('/')->to('top#index');
  $not_ssl_routes->route('/entry/:id', id => qr/\d+/)->to('entry#index', id => 1 );

  # Any Routes
  $routes->route('/:controller')->to(action => 'index');
  $routes->route('/:controller/:action')->to();
  $routes->route('/:controller/:action/:id')->to();
}

なんかイマイチ納得行かないけれど妥協。

おまけ

確認方法

opensslを使ってコマンドラインで確認してみるとLocationヘッダがhttpsになっているのが確認できる。

$ openssl s_client -connect localhost:443
...
    Start Time: 1383817749
    Timeout   : 300 (sec)
    Verify return code: 18 (self signed certificate)
---
GET / HTTP/1.1
Host:local

HTTP/1.1 302 Found
Server: nginx/1.4.3
Date: Thu, 07 Nov 2013 09:49:29 GMT
Content-Length: 0
Location: https://local/
Connection: keep-alive

Filed under: Mojolicious

Trackback Uri






2013年 11月 3

リバースプロキシの後ろでwebアプリを動かすテストしたいのでlocal環境にNginxを入れる。

Nginxのインストール

$ sudo port install nginx +ssl

追記:SSLを使う場合は +ssl が必要みたい
A Guide to PHP, MySQL and Nginx on Macports

設定ファイルを作成

$ cd /opt/local/nginx
$ sudo cp nginx.conf.default nginx.conf
$ sudo cp mime.types.default mime.types

Nginx起動

$ sudo nginx

ブラウザで検証

ブラウザでhttp://localhost にアクセス
safariでNginxの確認

おk


Filed under: Mac,開発環境

Trackback Uri








2013年 11月 1

Apache2.2にmod_SpeedyCGIを組込むにはパッチが必要

で以前やったんだけどイマイチ手順がまとまっていないので。

ポイント
  • 作業ディレクトリは /root/src
  • httpd-develが必要
  • rootで作業した方が楽

1. Apacheインストール

$ su -
# yum install httpd httpd-devel

※ apxs が必要になるので httpd-devel をインストールすること

2. Speedy_CGIをダウンロードしてパッチを当てる

# cd /root/src
# wget http://daemoninc.com/SpeedyCGI/CGI-SpeedyCGI-2.22.tar.gz
# tar zxvf CGI-SpeedyCGI-2.22.tar.gz
# cd CGI-SpeedyCGI-2.22/mod_speedycgi2
# wget http://sourceforge.net/p/speedycgi/patches/_discuss/thread/f3ff7350/afa5/attachment/patch-mod_speedycgi2.c
# patch -p1 < patch-mod_speedycgi2.c

※ 参考ページにはパッチファイルをFTPでアップロードする必要があると書いてあるけどwgetで出来た。
パッチ公開ページ

3. Speedy_CGIインストール

# perl Makefile.PL
# make install
〜〜〜 コンパイル中 〜〜〜
----------------------------------------------------------------------
Libraries have been installed in:
   /usr/lib/httpd/modules

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
     during execution
   - add LIBDIR to the `LD_RUN_PATH' environment variable
     during linking
   - use the `-Wl,--rpath -Wl,LIBDIR' linker flag
   - have your system administrator add LIBDIR to `/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
chmod 755 /usr/lib/httpd/modules/mod_speedycgi.so
[activating module `speedycgi' in /etc/httpd/conf/httpd.conf]
超参考:

Filed under: Apache,インストールメモ

Trackback Uri