トップ > 興味のあること > コンピュータ > ソフトウェア

更新情報

2018年11月14日 シェル-Pontaカード到着
2018年11月11日 31.6km/L
2018年11月3日 トゥーランを手放す
2018年10月25日 iPhone 6s売却
2018年10月23日 Qi充電器購入
2018年10月20日 iPhone 8 Plus
2018年の携帯電話
2018年10月19日 トゥーラン、雹害鑑定
2018年10月6日 FITハイブリッド書類提出
2018年9月30日 次期主力乗用車2018
2018年9月5日 HP35s、電池交換
モッピー!お金がたまるポイントサイト
日々の生活にhappyをプラスする|ハピタス

nginx

2018年4月30日

FreeBSD 11.1p9でapache2.4.33を動かしているのだが、 どうもLet's EncryptのSAN証明書が使えない。 3月くらいまでは使えていたのだが。 OSかapacheのバージョンアップで何か変わったのかもしれない。 なので、フロントエンドをnginxにして、 CGIをapacheで実行するようにしてみた。

インストール

# pkg install nginx-full

でインストール。

基本設定

設定ファイルは/usr/local/etc/nginx/nginx.confなので、 http以下を

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

    expires 7d;

    sendfile        on;

    keepalive_timeout  65;

    gzip  on;

    server {
        listen       80;
        server_name  www.akiyama.nu;

        location / {
            root   /usr/local/www/apache24/data;
            index  index.html;
            ssi    on;
            ssi_last_modified on;
        }

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/local/www/nginx-dist;
        }
    }

    # HTTPS server
    #
    server {
        listen       443 ssl http2;
        server_name  www.akiyama.nu;

        ssl_certificate      /usr/local/etc/letsencrypt/live/tomoaki.akiyama.nu/fullchain.pem;
        ssl_certificate_key  /usr/local/etc/letsencrypt/live/tomoaki.akiyama.nu/privkey.pem;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  ECDHE+AESGCM:DHE+AESGCM:HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        location / {
            root   /usr/local/www/apache24/data;
            index  index.html;
            ssi    on;
            ssi_last_modified on;
        }
    }
}
              

として実にあっさりと動いた。 で、locationやssl関連の設定はvirtual hostなど複数ヶ所で同じ物を使うので、 include化した。

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

    expires 7d;

    sendfile        on;

    keepalive_timeout  65;

    gzip  on;

    server {
        listen       80;
        server_name  www.akiyama.nu;

        include root.conf;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/local/www/nginx-dist;
        }
    }

    # HTTPS server
    #
    server {
        listen       443 ssl http2;
        server_name  www.akiyama.nu;

        include ssl.conf;
        include root.conf;
    }

}
              

ssl.confやroot.confは/usr/local/etc/nginx/に配置してあり、 それぞれ

ssl_certificate      /usr/local/etc/letsencrypt/live/tomoaki.akiyama.nu/fullchain.pem;
ssl_certificate_key  /usr/local/etc/letsencrypt/live/tomoaki.akiyama.nu/privkey.pem;

ssl_session_cache    shared:SSL:1m;
ssl_session_timeout  5m;

ssl_ciphers  ECDHE+AESGCM:DHE+AESGCM:HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers  on;
              
location / {
    root   /usr/local/www/apache24/data;
    index  index.html;
    ssi    on;
    ssi_last_modified on;
}
              

となっている。

CGIの設定

なお、nginxではCGIを直接実行できない。 色々と方法はあるらしいが、 今回はapacheを8080ポートで待ち受けさせて、 そちらにproxyすることにした。

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

    expires 7d;

    sendfile        on;

    keepalive_timeout  65;

    gzip  on;

    server {
        listen       80;
        server_name  www.akiyama.nu;

        include root.conf;
        location /awstats/awstats.pl {
            proxy_pass http://192.168.2.2:8080/awstats/awstats.pl;
        }

        location /awstatsclasses {
            alias /usr/local/www/awstats/classes/;
        }

        location /awstatscss {
            alias /usr/local/www/awstats/css/;
        }

        location /awstatsicons {
            alias /usr/local/www/awstats/icon/;
        }

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/local/www/nginx-dist;
        }
    }

    # HTTPS server
    #
    server {
        listen       443 ssl http2;
        server_name  www.akiyama.nu;

        include ssl.conf;
        include root.conf;
        location /awstats/awstats.pl {
            proxy_pass http://192.168.2.2:8080/awstats/awstats.pl;
        }

        location /awstatsclasses {
            alias /usr/local/www/awstats/classes/;
        }

        location /awstatscss {
            alias /usr/local/www/awstats/css/;
        }

        location /awstatsicons {
            alias /usr/local/www/awstats/icon/;
        }
    }
}
              

proxy_passでapacheに処理を任せている。 aliasは、AWStatsの画像がうまく表示されなかったので追加した。 これもhttpとhttpsの両方で同じ設定なので、 include化してある。

2018年5月1日

結局、nginxをリバースプロキシにして、 apacheをバックエンドで動かすことにした。 設定としては

と、比較的シンプルになった。 速度的には不利な方法だが、 CGIがそのまま動くという魅力には勝てなかった。