在Nginx上实现SSL和反向代理

首先

这是用于将SSL + 反向代理设置为Nginx的配置。尽管看起来有很多步骤,但如果预先创建好配置文件的模板,设置相对容易。

前提条件

    • さくらVPSのUbuntu16.04(カスタムOS)

 

    • ドメインを取得済みで、かつサブドメインも登録済み。

 

    Let’s Encryptを導入済み。

假设条件

    ドメインhoge.fuga.comにアクセスしたときにリバースプロキシでサーバアドレス123.456.789.12:3456に接続させる。

設置步驟

第一次验证

创建用于认证的目录,并将所有者用户更改为www-data。

# mkdir /var/www/hoge
# chown -R www-data:www-data /var/www/hoge

创建用于HTTP连接的网站设置文件。

# vi /etc/nginx/conf.d/hoge.conf

将配置文件的内容设置为如下所示。

# HTTPの設定
server{
    listen 80;
    listen [::]:80;
    server_name hoge.fuga.com;

    #letsencryptで認証するためのURL
    location ^~ /.well-known/acme-challenge {
        default_type "text/plain";
        root /var/www/hoge;
    }
}

重新启动Nginx。

# systemctl restart nginx

使用certbot对hoge.fuga.com子域名进行认证。
认证完成后,将在/etc/letsencrypt/live下生成密钥文件。

# certbot certonly --webroot -w /var/www/hoge -d hoge.fuga.com

SSL连接设置

修改设置文件。

# vi /etc/nginx/conf.d/hoge.conf

请按照以下方式编辑设置文件。

# HTTPの設定
server{
    listen 80;
    listen [::]:80;
    server_name hoge.fuga.com;

    #letsencryptで認証するためのURL
    location ^~ /.well-known/acme-challenge {
        default_type "text/plain";
        root /var/www/hoge;
    }
    #HTTPで接続された場合、HTTPSで同URLにリダイレクトさせる。
    return 301 https://$host$request_uri;
}

# HTTPSの設定
server{
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name    hoge.fuga.com;

    ssl_protocols TLSv1.2;
    ssl_ciphers EECDH+AESGCM:EECDH+AES;
    ssl_ecdh_curve prime256v1;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;

    # SSL認証キーの参照先。certbotで自動的に生成されるファイルを指定する。
    ssl_certificate     /etc/letsencrypt/live/hoge.fuga.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/hoge.fuga.com/privkey.pem;
    ssl_dhparam         /etc/ssl/certs/dhparam.pem;

    keepalive_timeout    70;
    sendfile             on;
    client_max_body_size 0;

    proxy_set_header    Host    $host;
    proxy_set_header    X-Real-IP    $remote_addr;
    proxy_set_header    X-Forwarded-Host       $host;
    proxy_set_header    X-Forwarded-Server    $host;
    proxy_set_header    X-Forwarded-For    $proxy_add_x_forwarded_for;

    location / {
        # プロキシ先のサーバアドレスとポート番号を指定
        proxy_pass    123.456.789.12:3456;
    }
}

重启Nginx。

# systemctl restart nginx

使用浏览器连接到https://hoge.fuga.com,并确保目标页面正常显示。

※2019年2月8日修正:让我们来修正一下:Let’s Encrypt的重新认证URL必须是HTTP端才可以使用……

广告
将在 10 秒后关闭
bannerAds