获取证书
acme
申请证书
1 2 3 4 5 6
| acme.sh --register-account -m YourEmail
acme.sh --set-default-ca --server letsencrypt
echo 'alias acme.sh=~/.acme.sh/acme.sh' >> ~/.bashrc source ~/.bashrc
|
腾讯云托管域名
1 2 3 4
| export DP_Id="" export DP_Key="" acme.sh --issue --dns dns_dp -d aa.com -d *.aa.com
|
cloudflare托管域名
1 2 3 4 5 6 7 8 9
| export CF_Key="" //此处替换成你自己的Key export CF_Email="" //此处填写你给Cloudflare绑定的邮箱账号 acme.sh --issue --dns dns_cf -d aa.com -d *.aa.com
export CF_Token="" export CF_Account_ID="" export CF_Zone_ID="" //此项非必须,上面两项需要提供
|
root用户安装证书并自动更新证书
1 2 3 4
| acme.sh --installcert -d xxx.com \ --key-file /etc/nginx/ssl/xxx.key \ --fullchain-file /etc/nginx/ssl/xxx.crt \ --reloadcmd "service nginx reload"
|
查看修改自动检测时间
配置Nginx
通常在/etc/nginx/sites-available下创建配置文件,然后在/etc/nginx/sites-enabled下创建软连接
1 2 3 4
| cd /etc/nginx sudo touch sites-available/demo sudo rm sites-enabled/default sudo ln -s sites-available/demo sites-enabled/demo
|
根据自己的域名等信息将下面内容修改后粘贴到demo文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| server { listen 80; server_name your_domain.com; return 301 https://$host$request_uri; }
server { listen 443 ssl; server_name your_domain.com;
ssl_certificate /etc/nginx/ssl/example.crt; ssl_certificate_key /etc/nginx/ssl/example.key;
ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH'; }
|
重启Nginx服务
1 2 3
| sudo nginx -s reload #重载 sudo service nginx restart sudo service nginx status #查看运行信息
|
反向代理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| server { listen 443 ssl; listen [::]:443 ssl; server_name ql.xxx; ssl_certificate /etc/nginx/ssl/ql.xxx.crt; ssl_certificate_key /etc/nginx/ssl/ql.xxx.key; ssl_session_timeout 5m; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH'; ssl_prefer_server_ciphers on; location / { proxy_pass http://127.0.0.1:5700; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
|
经过反向代理后,由于在客户端和web服务器之间增加了中间层,因此web服务器无法直接拿到客户端的ip,通过$remote_addr变量拿到的将是反向代理服务器的ip地址。
但是,nginx是可以获得用户的真实ip的,也就是说nginx使用$remote_addr变量时获得的是用户的真实ip,如果我们想要在web端获得用户的真实ip,就必须在nginx里作一个赋值操作,即:
1
| proxy_set_header X-Real-IP $remote_addr;
|
$remote_addr 只能获取到与服务器本身直连的上层请求ip,所以设置$remote_addr一般都是设置在在第一个代理服务器上。
多级代理时:
比如有时候是通过cdn访问的,那么后面web服务器获取到的,永远都是 cdn 的 ip 而非不是用户ip,那么这个时候就要用到X-Forwarded-For了,这个变量的意思,其实就像是链路反追踪,从客户的真实ip为起点,穿过多层级的代理,最终到达web服务器,都会记录下来,所以在获取用户真实ip的时候,一般就可以设置成:
1
| proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|