nginx常见报错及解决acme.sh给Nginx配置SSL证书

2023-10-20 18:28

本文主要是介绍nginx常见报错及解决acme.sh给Nginx配置SSL证书,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

问题排查:

nginx -t //检查配置是否正确

只要返回ok就说明配置没问题。
在这里插入图片描述

Nginx报错Failed to restart nginx.service: Unit not found

解决方法:

1、在根目录下执行

vim /etc/init.d/nginx

2、插入以下代码

#!/bin/sh
# nginx - this script starts and stops the nginx daemin
#
# chkconfig:   - 85 15# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \
#               proxy and IMAP/POP3 proxy server# processname: nginx
# config:      /usr/local/nginx/conf/nginx.conf
# pidfile:     /usr/local/nginx/logs/nginx.pid# Source function library.. /etc/rc.d/init.d/functions# Source networking configuration.. /etc/sysconfig/network# Check that networking is up.[ "$NETWORKING" = "no" ] && exit 0nginx="/usr/local/nginx/sbin/nginx"prog=$(basename $nginx)NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"lockfile=/var/lock/subsys/nginxstart() {[ -x $nginx ] || exit 5[ -f $NGINX_CONF_FILE ] || exit 6echo -n $"Starting $prog: "daemon $nginx -c $NGINX_CONF_FILEretval=$?echo[ $retval -eq 0 ] && touch $lockfilereturn $retval}stop() {echo -n $"Stopping $prog: "killproc $prog -QUITretval=$?echo[ $retval -eq 0 ] && rm -f $lockfilereturn $retval}restart() {configtest || return $?stopstart}reload() {configtest || return $?echo -n $"Reloading $prog: "killproc $nginx -HUPRETVAL=$?echo}force_reload() {restart}configtest() {$nginx -t -c $NGINX_CONF_FILE}rh_status() {status $prog}rh_status_q() {rh_status >/dev/null 2>&1}case "$1" instart)rh_status_q && exit 0$1;;stop)rh_status_q || exit 0$1;;restart|configtest)$1;;reload)rh_status_q || exit 7$1;;force-reload)force_reload;;status)rh_status;;condrestart|try-restart)rh_status_q || exit 0;;*)echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"exit 2esac

3、使用下面命令进入目录

cd /etc/init.d

4、依次执行下列命令

chmod 755 /etc/init.d/nginx (添加权限)chkconfig --add nginx (设置开机启动,注意add前面是两个短横线-)

5、开启nginx服务并且查看

service nginx start 
//或 
systemctl start nginx.service
//查看运行状态
systemctl status nginx.service

在这里插入图片描述

nginx command is not found

解决:需要给Nginx做一个软连接

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/nginx

nginx: [error] open() “/usr/local/nginx/logs/nginx.pid“ failed

报错导致Nginx无法启动,如果你的安装路径是:/usr/local/nginx/sbin/nginx
在启动Nginx时指定nginx.conf的路径

sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

使用acme.sh给Nginx配置HTTPS证书

1、执行安装命令

curl  https://get.acme.sh | sh
source ~/.bashrc

设置为自动更新

acme.sh  --upgrade  --auto-upgrade

2、生成证书,命令acme.sh --issue -d 域名

//初次创建
acme.sh --issue -d whyta.cn  --dns dns_dp --server 
https://acme.freessl.cn/v2/DV90/directory/b0xxx...
//重新申请
acme.sh --renew --issue -d whyta.cn  --dns dns_dp --server 
https://acme.freessl.cn/v2/DV90/directory/b0xxx...
//添加通配符二级域名
acme.sh --issue -d whyta.cn *.whyta.cn --dns dns_dp --server 
https://acme.freessl.cn/v2/DV90/directory/b0xxx...

3、copy/安装 证书,将证书保存到nginx路径下

acme.sh --install-cert -d 域名 \
--key-file       域名证书key  \
--fullchain-file 域名证书cert \
--reloadcmd     "nginx -s reload"

例如:

acme.sh --install-cert -d whyta.cn \
--key-file       /usr/local/nginx/cert/whyta.cn.key.pem  \
--fullchain-file /usr/local/nginx/cert/whyta.cn.cert.pem \
--reloadcmd     "nginx -s reload"

以上命令会将证书拷贝复制到 /etc/nginx/cert/目录下,并重启 Nginx 。

4、Nginx添加https配置

修改/usr/local/nginx/conf/conf.d/xxx.cn.conf文件,添加https相关配置,这里的ssl_certificate和ssl_certificate_key,路径是证书的保存路径,需要和acme.sh --install-cert保存一致

//一级域名80和443配置
server {listen 80;listen 443 ssl;server_name www.xxx.cn;ssl_certificate   /usr/local/nginx/cert/xxx.cn.cert.pem;ssl_certificate_key  /usr/local/nginx/cert/xxx.cn.key.pem;ssl_session_timeout 5m;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_prefer_server_ciphers on;location / {root    /www;}error_page  401 403 404              /404.html;location = /404.html {root   html;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}
}
//二级域名80和443配置
server {listen       80;listen       443 ssl;server_name  blog.xxx.cn;location / {root  /usr/local/www/web/dist/;index  index.html index.htm;}}

这里的key-file路径对应到Nginx配置的ssl_certificate_key路径,fullchain-file路径对应到Nginx配置的ssl_certificate路径。

5、撤销和强制更新证书

强制更新证书acme.sh --renew -f -d 域名

acme.sh --renew -f -d www.xxx.cn

撤销证书acme.sh --renew -f -d 域名

acme.sh --revoke -d www.xxx.cn

6、查看证书列表

acme.sh --list

7、自动续期

## 60天后自动续期
acme.sh --install-cronjob## 立即执行续期
acme.sh --cron

续期操作会自动化执行:

  • 签发新的证书
  • 复制证书到指定位置(根据之前的命令)
  • 重启服务(根据之前的命令

8、布署双证书(以 nginx 为例:)

  • Nginx在版本1.11以后(包括1.11)才支持部署双证书
  • 证书如果配置不当是不会显示双证书的
  • 双证书配置后,不会同时发送给客户端,根据客户端的支持自动选择
  • ssl_ciphers 属性要加上ECDHE-ECDSA-AES128-GCM-SHA256并放在最前。此属性有其它的支持选项,可自行测试。
  • 配置完成后重启服务。
  • 此参数申请的证书为:ECDSA 256 bits和 RSA 2048 bits,需要其它的可自行修改参数测试
server {listen      443 ssl http2;server_name www.xinac.com;# ECC Certssl_certificate             /etc/letsencrypt/acme.sh/xxx.com/ecc/fullchain.pem;ssl_certificate_key         /etc/letsencrypt/acme.sh/xxx.com/ecc/privkey.pem;# RSA Certssl_certificate             /etc/letsencrypt/acme.sh/xxx.com/rsa/fullchain.pem;ssl_certificate_key         /etc/letsencrypt/acme.sh/xxx.com/rsa/privkey.pem;ssl_session_cache           shared:SSL:10m;ssl_session_timeout         30m;ssl_protocols               TLSv1.2 TLSv1.3;ssl_prefer_server_ciphers   on;ssl_ciphers                 ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE;......
}

这篇关于nginx常见报错及解决acme.sh给Nginx配置SSL证书的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/248897

相关文章

C++右移运算符的一个小坑及解决

《C++右移运算符的一个小坑及解决》文章指出右移运算符处理负数时左侧补1导致死循环,与除法行为不同,强调需注意补码机制以正确统计二进制1的个数... 目录我遇到了这么一个www.chinasem.cn函数由此可以看到也很好理解总结我遇到了这么一个函数template<typename T>unsigned

Nginx部署HTTP/3的实现步骤

《Nginx部署HTTP/3的实现步骤》本文介绍了在Nginx中部署HTTP/3的详细步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前提条件第一步:安装必要的依赖库第二步:获取并构建 BoringSSL第三步:获取 Nginx

mybatis映射器配置小结

《mybatis映射器配置小结》本文详解MyBatis映射器配置,重点讲解字段映射的三种解决方案(别名、自动驼峰映射、resultMap),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定... 目录select中字段的映射问题使用SQL语句中的别名功能使用mapUnderscoreToCame

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资

MySQL8 密码强度评估与配置详解

《MySQL8密码强度评估与配置详解》MySQL8默认启用密码强度插件,实施MEDIUM策略(长度8、含数字/字母/特殊字符),支持动态调整与配置文件设置,推荐使用STRONG策略并定期更新密码以提... 目录一、mysql 8 密码强度评估机制1.核心插件:validate_password2.密码策略级

ShardingProxy读写分离之原理、配置与实践过程

《ShardingProxy读写分离之原理、配置与实践过程》ShardingProxy是ApacheShardingSphere的数据库中间件,通过三层架构实现读写分离,解决高并发场景下数据库性能瓶... 目录一、ShardingProxy技术定位与读写分离核心价值1.1 技术定位1.2 读写分离核心价值二

深度解析Java @Serial 注解及常见错误案例

《深度解析Java@Serial注解及常见错误案例》Java14引入@Serial注解,用于编译时校验序列化成员,替代传统方式解决运行时错误,适用于Serializable类的方法/字段,需注意签... 目录Java @Serial 注解深度解析1. 注解本质2. 核心作用(1) 主要用途(2) 适用位置3