一切福田,不離方寸,從心而覓,感無不通。

Category Archives: Backend

踩坑备忘录—Nginx反向代理之server_name与ip

我们的系统依赖一个第三方的服务,该服务是通过IP限制访问权限的。出于安全考虑,我们的系统会校验证书,因此我们采用Nginx反向代理去访问该服务。该服务迁移到cloud上之后,我们系统出现了问题。 Nginx的配置文件如下所示:

  Debug 在出现线上问题的时候,第一时间检查了配置文件的改动记录 ⇒ 配置文件没有改到。 接着检查了,证书是否过期⇒没有过期。 通过域名curl请求 ⇒ 第三方服务正常,证书正确。 在我们没有任何改动的情况下,第三方服务也是单纯地做了迁移,然后就挂了。 思考了很久之后,Nginx没有任何改动,那么出问题的一定不是我们。那么出问题一定是第三方,最直接的方式是联系第三方提供商,联系渠道很繁琐,时间成本也会很高。为了快速修复问题,我们决定盲调Bug。 尝试解决 第一次尝试,已知curl请求一切正常。尝试着将upstream干掉,直接写道proxy_path中。依旧是失败,错误日志中出现了”https://1.1.1.1:443 TLS handshake failed”。推断,proxy_path会将域名转换成ip。 第二次尝试,尝试检查curl ip来访问服务。失败。推断,IP和域名指向了两个不同的服务。到这里算是找到root cause了。 解决思路:反向代理时候,通过域名访问而不是IP访问。 查询文档,发现可以使用配置项:proxy_ssl_server_name,该配置项默认值是off,需要将一些内容写到配置文件中:

  第三次尝试,将proxy_ssl_server_name on写入到配置文件中。成功。 什么是server_name 服务器名称指示(Server Name Indication, SNI)是对TLS协议的扩展。在握手过程开始时,通过该协议,客户端指示其尝试连接的主机名。该协议允许服务器上的同一个IP和TCP端口拥有多个证书,因此允许同一个IP地址为多个HTTPS网站提供服务,且无需所有网站使用相同的证书。   from:https://www.realks.com/2021/03/07/nginx-proxy-ssl-server-name/

龙生   18 Feb 2022
View Details

docker export import后,导入镜像,启动时的错误,Error response from daemon: No command specified

Docker的流行与它对容器的易分享和易移植密不可分,用户不仅可以把容器提交到公共服务器上,还可以把容器导出到本地文件系统中。同样,我们也可以把导出的容器重新导入到Docker运行环境中。Docker的容器导入导出分别用import和export命令完成。

龙生   18 Feb 2022
View Details

docker: Error response from daemon: No command specified. 解决

一般来说产生这个报错是因为启动的容器是被docker export出来的镜像。
Command可以通过下面命令查询到:docker ps -a --no-trunc
查询到Command之后,运行容器:docker run --name nginx-import-test -d -p 4000:80 nginx-import-test:1.0 /docker-entrypoint.sh nginx -g 'daemon off;'

龙生   18 Feb 2022
View Details

Allow Zero Datetime=True产生的问题

MySQL连接字符串里加上了“Allow Zero Datetime=True”,导致错误:

纠基原因,这句配置允许零日期后,MySQL与.Net的日期类型是不一样的,导致转换失败。去掉就正常了,默认值是False。

 

龙生   17 Feb 2022
View Details

nginx 414 Request-URI Too Large

可能原因
场景1.cookie中写入的值太大造成的,因为header中的其他参数的size一般比较固定,只有cookie可能被写入较大的数据
场景2.请求参数太长,比如发布一个文章正文,用urlencode后,使用get方式传到后台。

龙生   15 Feb 2022
View Details

Docker搭建L2TP-VPN服务器

(1)首先需要在 Docker 主机上加载 IPsec af_key 内核模块:
(2)使用本镜像创建一个新的 Docker 容器 (将 ./vpn.env 替换为你自己的 env 文件)
(3)创建一个新的 Docker 容器 (将 ./vpn.env 替换为你自己的 env 文件)

龙生   12 Feb 2022
View Details

Docker容器下PHP安装zip扩展

docker容器下PHP有自己特有的安装扩展方法: docker-php-source //在容器中创建/usr/src/php文件夹 docker-php-ext-install //安装并启动扩展(常用) docker-php-ext-enable //启动PHP扩展 docker-php-ext-configure //添加扩展自定义配置,和enable搭配使用 安装zip扩展所需的依赖扩展 apt-get update && apt-get install -y zlib1g-dev && apt-get install -y libzip-dev 安装并启动zip扩展 docker-php-ext-install zip ———————————————— 版权声明:本文为CSDN博主「reg183」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/chendongpu/article/details/120796468

龙生   11 Feb 2022
View Details

docker php安装GD扩展

apt update #更新软件源 apt install -y libwebp-dev libjpeg-dev libpng-dev libfreetype6-dev #安装各种库 docker-php-source extract #解压源码 cd /usr/src/php/ext/gd #gd源码文件夹 docker-php-ext-configure gd --with-webp-dir=/usr/include/webp --with-jpeg-dir=/usr/include --with-png-dir=/usr/include --with-freetype-dir=/usr/include/freetype2 #准备编译 docker-php-ext-install gd #编译安装 php -m | grep gd from:https://www.cnblogs.com/xuezhigu/p/13717353.html

龙生   11 Feb 2022
View Details

Docker秒搭建Php7开发环境

环境
首先安装Docker,无论你是Windows还是Linux、MocOS都可以。安装Docker自行百度。

Docker镜像源
访问https://hub.docker.com即可,它是镜像大仓库。

龙生   10 Feb 2022
View Details

docker 安装mariadb

1.docker search mariadb 查看mariadb数据源
2.docker pull mariadb 拉取mariadb数据库
3.mkdir -p /data/mariadb/data 创建msyql到本地的数据文件夹映射路径
4.docker run --name mariadb -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -v /data/mariadb/data:/var/lib/mysql -d mariadb 启动mariadb容器,-e MYSQL_ROOT_PASSWORD=root 赋值mysql的量,来设置root用户的密码为root
5.docker ps -a 查看mysql容器启动情况
6.docker container update --restart=always d72e7e910ab6 设置容器自启动随docker的启动而启动

龙生   10 Feb 2022
View Details
1 50 51 52 281