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

更新情報

2024年3月17日 グランドセイコー
2024年2月9日 防水温湿度計
2024年2月12日 Bluetoothマウス切断
2024年2月11日 ANKER SoundCore
2024年2月10日 ノート給油
2024年2月8日 ハクキンカイロ発熱量
2024年1月28日 出勤セット
202年1月7日 バイク保険更新
2024年1月2日 M-CR612購入
2023年12月26日 モバイルディスプレイ

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がそのまま動くという魅力には勝てなかった。