opamp_sando's blog

クソザコが割りと適当なことを書くためにある備忘録です。あとたまに普通の日記も書きます

nginxでリバースプロキシを構築した(ArchLinux)

nodejsでやってやろうと思ったけど、JSがわからなかったし自動起動とかその辺が面倒なのでnginxでやってみた。(jsとかよくわからないおいらに取ってはnginxの方が何倍も簡単にできた) あと、この記事は基本的に設定に関して中心にやっていくんだけどこまい所でArchLinuxの癖が出てる可能性があるので注意。

今日やること

Nginxを使ってApatchのhttpとhttpsへのリバースプロキシを作る。

Apatchの設定

ポートは当然nginxが80番と443番だったかを取るので、それ以外に設定する。Apatchのポート番号変更は"Listen"を書き換えるとよい。 ArchLinusの場合は/etc/httpd/conf/httpd.confの上のようにあるListenを書き換える

Listen 8000

とする。(http)

また、httpsに関しては/etc/httpd/conf/extra/http-ssl.confを書き換える。ここにもListenがあるので

Listen 8080

とする。(https) また、httpsの場合はVirtualHostの方も忘れてはならない。同一のファイル内にある

<VirtualHost _default_:443>

という行を見つけて、次のようにする。

<VirtualHost _default_:8080>

これでおk。 Apatchを再起動する。

$ sudo systemctl restart httpd

(このコマンドはArchLinuxなどのsystemdを採用してるシステム固有のもの と思う)

試しに現状でサーバーにアクセスしてhttpとhttpsが80と443で繋がらないで8000と8080でつながることを確認する。

Nginxの設定

Nginxの設定は全部載っけて必要な部分にコメントを書いておいたので以下を参照。

worker_processes  1;
events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;
    gzip  on;

    server {
        listen       80;#80番になってるか確認
        server_name  localhost;
        location / {
            proxy_pass http://localhost:8000/; #apatchに設定したhttpのポートにする
            proxy_redirect default;#コピペでおk
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }

    server {
        listen       443;#443になっているか確認
        server_name  localhost;

        ssl                  on;#sslをonにする
        ssl_certificate      /path/to/key.crt;#ssl使うならあるはずなので、PATHを指定
        ssl_certificate_key  /path/to/key.key;#同様

        ssl_session_timeout  5m;

        ssl_protocols  SSLv2 SSLv3 TLSv1;
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers   on;

        location / {
            proxy_pass https://localhost:8080/;#apatchに設定したhttpsのポートにする。
            proxy_redirect default;
        }
    }
    #以下すべてコピペでOK
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Host $http_host;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

といった感じかな。SSL証明書のPATHなどを間違わずに指定すること。心配ならApatchに設定してるファイルのPATHを見に行くといいんじゃないかな。 ちなみ余談になるけどSSL証明書の作り方は...

http://k-ishik.seesaa.net/article/48436415.html

が良い感じに参考になった。

Nginxを起動して接続を確認

$ sudo systemctl start nginx

して、接続を確認。先ほどは繋げなかった80番と443番でhttp,httpsの接続を確認してできていたら成功。間違えていたら何らかの記述に誤りがあるかもしれない。

ということで今日の記事は以上かな。


※ owncloudをこの構築した環境で運用していて問題が発生した 
owncloudでファイルがアップロードできない
こういった問題も起こるようである。

Firefox ブラウザ無料ダウンロード