nginx配置ssl

这周的主要任务,是对项目进行收尾工作并上线,完整的体验了一下项目的上线过程,总的来说还是很有收获的,选取其中的nginx配置证书来写写。

证书配置

申请证书

证书配置的第一步,当然得有证书才行,这一步就不说了。

修改nginx配置

nginx配置ssl_第1张图片
一般来说,只需要修改两个参数

ssl_certificate 和 ssl_certificate_key修改成你的证书所作的位置。
ssl_certificate对应的文件可能是 .pem
ssl on 已被弃用,用listen……ssl代替

修改完以后,基本的配置就完成了,重启nginx

nginx -s reload

nginx:[emerg]unknown directive ssl

出现了这个错误,这是因为配置SSL证书需要引用到nginx的中SSL模块,然而我们一开始编译的Nginx的时候并没有把SSL模块一起编译进去,如何解决呢?解决办法也很简单

  1. 进入nginx的解压目录,执行./configure --with-http\_ssl\_module,这时若你的系统中未安装openssl可能会出现错误,需要安装openssl

      #ubuntu
      apt install openssl openssl-devel
    
      #centos
      yum -y install openssl openssl-devel
  2. 执行make命令,但是不要执行make install,因为make是用来编译的,而make install是安装,不然你整个nginx会重新覆盖的。
  3. 在我们执行完做命令后,我们可以查看到在nginx解压目录下,objs文件夹中多了一个nginx的文件,这个就是新版本的程序了。首先我们把之前的nginx先备份一下,然后把新的程序复制过去覆盖之前的即可。

    cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak #备份
    
    cp objs/nginx /usr/local/nginx/sbin/nginx
  4. 检验

    ./nginx -V
    

    nginx配置ssl_第2张图片

Permission denied

实际上,访问网站遇到的问题是500,开始第一反应是用500去查询,没找到什么有价值的,然后去看错误日志
image.png

我们需要了解try_files这个参数

try_files

语法格式

 格式1:try_files  _file_ ... _uri_;  
 格式2:try_files  _file_ ... =_code_;
  可应用的上下文:server,location段

官方解释

Checks the existence of files in the specified order and uses the first found file for request processing; the processing is performed in the current context. The path to a file is constructed from the  _file_parameter according to the  root and  alias directives. It is possible to check directory’s existence by specifying a slash at the end of a name, e.g. “ $uri/”. If none of the files were found, an internal redirect to the  _uri_ specified in the last parameter is made.

关键点1:按指定的file顺序查找存在的文件,并使用第一个找到的文件进行请求处理

关键点2:查找路径是按照给定的root或alias为根路径来查找的($uri)

关键点3:如果给出的file都没有匹配到,则重新请求最后一个参数给定的uri,就是新的location匹配

关键点4:如果是格式2,如果最后一个参数是 = 404 ,若给出的file都没有匹配到,则最后返回404的响应码

更多详细内容可以看这篇文章或查看官方文档

再结合上面的报错信息
image.png

解决办法

发生这个错误是因为nginx无法进入该文件所在文件夹或无法读该文件,解决办法有很多,我选择了一个我觉得最简单的
nginx配置ssl_第3张图片

你可能感兴趣的:(nginx,ssl)