apt 安装的nginx版本都低的很,我们如何如安装较新版的nginx且能够支持tsl1.3,这里主要讲一下如何通过apt install 来安装nginx。源码编译安装的话太麻烦了,对我等新手的话太难受了。apt 安装的话都是官方直接编译好的deb包拿来用就可以了省去配置相关的配置文件,还要装一大推的库文件。
开启tsl1.3的2个需求
1、nginx版本必须在1.13或者更新
2、Nginx需要使用OpenSSL 1.1.1以上的版本构建或与OpenSSL 1.1.1以上的版本一起运行。
通过查询我之前通过apt install 安装的nginx版本是1.10.0的 OpenSSL版本是1.1.1d,所以我们只需要将nginx升级成1.13以上的版本就可以了,OpenSSL就不用升级了。这里主要讲如何通过通过apt install 安装最新版的nginx
添加nginx官方源以及密匙
为nginx添加官方源,在/etc/apt/sources.list.d目录下新建nginx.list文件命令如下:
sudo vi /etc/apt/sources.list.d/nginx.list
将下面两条源地址粘贴到nginx.list文件中
deb http://nginx.org/packages/debian/ stretch nginx
deb-src http://nginx.org/packages/debian/ stretch nginx
添加Nginx GPG key密匙
wget http://nginx.org/keys/nginx_signing.key
sudo apt-key add nginx_signing.key
然后执行sudo apt update
如果没有报错的话,然后执行:
sudo apt install nginx
我们可以通过sudo nginx -v
来查看nginx的版本号如图:
如果之前我们安装过nginx可以先将之前的版本卸载掉,可以通过:
sudo apt remove nginx
这个不会删除配置文件
sudo apt purge nginx
这个会删除配置文件,如果使用这个命令的话一定要对站点的配置位置文件做一个备份,要不然后面会很麻烦,又得重新配置
sudo apt autoremove
这个是删除安装旧版nginx 自动安装的文件
然后重新一下服务器
安装nginx
重启完了之后我们开始安装nginx。实际上也就一条命令:
sudo apt install nginx
如果之前安装过旧版的nginx的话,可能还需要卸载nginx-comman和nginx-full这两个软件,我这里就遇到过这种问题,新版本老是装不上,老是报错,说我已将安装过nginx什么什么的,问题是我这里已经卸载了。后来通过查询已经安装的软件,才发现有这两个,然后卸载了就好了。查询已安装的软件的命令可以通过这个来查看:apt list --installed
配置php
不知道为什么,我们重新安装后发现nginx配置目录文件里我这里少了一些一下文件和目录,我当时卸载时是配置文件一块删除的,应该是版本升级后的变化吧,我也不是很清楚。少的东西如下 :
/etc/nginx/sites-available/
/etc/nginx/modules-enabled
/etc/nginx/snippets/fastcgi-php.conf
通过查看/etc/nginx/nginx.conf发现在站点配置文件放在这里也可以/etc/nginx/conf.d/目录里,当然你也可以自定义。只需要用include 自定义完整的路径,加入到nginx.conf中就可以了
我这边是直接将配置文件复制到/etc/nginx/conf.d/目录里,结果sudo nginx -t
报错说是没有/etc/nginx/snippets/fastcgi-php.conf这个文件,查了一下/etc/nginx/确实没有这个文件。然后网上找了几个小时找到了方法。在站点的配置文件中的server 字段中加入一下代码:
location ~ \.php$ {
#NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
include fastcgi_params;
fastcgi_intercept_errors on;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; ## 这里根据自己安装的php版本填写
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
}
在Nginx服务器块中启用TLS 1.3
在站点nginx配置文件中找到
ssl_protocols TLSv1.2;
字段,将其修改为:
ssl_protocols TLSv1.2 TLSv1.3;
然后在接着找ssl_ciphers
字段添加如下3条字段
TLS_AES_256_GCM_SHA384
TLS_CHACHA20_POLY1305_SHA256
TLS_AES_128_GCM_SHA256
想这样:
ssl_ciphers 'TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
完了如图大概就是这个样子:
然后检查一下配置问题有没有问题
sudo nginx -t
没有问题的话重启一下nginx
sudo systemctl restart nginx
或者sudo service nginx restart
如果站点套的有CloudFlare还需要在cloudflare中开启tsl1.3如图:
相关资料:
How To Enable TLS 1.3 in Nginx on Ubuntu 18.04 and 16.04
Nginx’s fastcgi-php.conf snippet is missing
https://stackoverflow.com/questions/43262435/nginxs-fastcgi-php-conf-snippet-is-missing