https中Mixed Content解决办法

问题描述

HTTPS页面里动态的引入HTTP资源,比如引入一个js文件,会被直接block掉的.在HTTPS页面里通过AJAX的方式请求HTTP资源,也会被直接block掉的。

解决办法

可以在相应的页面的里加上这句代码,意思是自动将http的不安全请求升级为https

<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">

nginx出现blocked for more than 120 seconds 以及 hung_task_timeout_secs错误解决办法

问题原因

默认情况下, Linux 会最多使用 40% 的可用内存作为文件系统缓存。当超过这个阈值后,文件系统会把将缓存中的内存全部写入磁盘, 导致后续的 IO 请求都是同步的。

将缓存写入磁盘时,有一个默认120 秒的超时时间。 出现上面的问题的原因是 IO 子系统的处理速度不够快,不能在 120 秒将缓存中的数据全部写入磁盘。

IO 系统响应缓慢,导致越来越多的请求堆积,最终系统内存全部被占用,导致系统失去响应。

解决办法

根据应用程序情况,对 vm.dirty_ratio,vm.dirty_background_ratio 两个参数进行调优设置。 例如,推荐如下设置:

# sysctl -w vm.dirty_ratio=10
# sysctl -w vm.dirty_background_ratio=5
# sysctl -p

如果系统永久生效,修改 /etc/sysctl.conf 文件。加入如下两行:

#vi /etc/sysctl.conf 
vm.dirty_background_ratio = 5
vm.dirty_ratio = 10

重启系统生效。

Wagtail介绍 — 基于Django的Python CMS

关于Wagtail

Wagtail是一个用Python编写的开源CMS,并构建在Django框架上。它是由开发者为开发者开发的,它为编辑提供了一个快速吸引人的界面,让编辑可以直观地创建和结构化内容。优雅、强大和敏捷——我们对Wagtail能提供的东西感到非常自豪。

为什么使用Wagtail

有很多优秀的开源内容管理系统。我们在大型网站上非常成功地使用Drupal,包括知名的非政府组织、筹款慈善机构、智库、大学和公共部门组织。还有一些优秀的Django CMS,包括Mezzanine, Fein和Django CMS,它们的开发人员社区很好,案例研究也令人印象深刻。

但是,在建立了14年的内容管理网站之后,我们对编辑的经验和CMS的工作方式和结构有了强烈的意见,我们需要通过对现有项目的贡献来管理一个比我们能够实现的更快的发展速度。

Django友好

Django自0.96年以来一直是Andrew Godwin的热情支持者和支持者,我们很自豪地将Django和Django等Django和Django等人都在我们的校友中。

在过去的5年里,Django一直是我们最喜欢的应用程序开发的平台,因为它继续为健壮的、快速的开发和编码乐趣所带来的甜蜜点。

Wagtail 提供

  • 使用标准的Django模板完全控制设计
  • 通过标准的Django模型配置内容类型
  • 与现有的Django应用程序的直接集成。

图像/文档管理

不要打断你的流程来添加媒体——直观设计

权限

简单且可配置,即使是复杂的需求

工作流

包括多站点和多语言支持

使用Wagtail

安装 Wagtail

pip install wagtail

建立站点

wagtail start mysite

设置数据

cd mysite
python manage.py migrate

创建管理账号

python manage.py createsuperuser
python manage.py runserver

现在,你可以登录 http://127.0.0.1:8000/admin/. 开始构建你的站点,或者查看我们的Wagtail10分钟指南

PHP用Imagck实现图片文字水平以及垂直集中

    $draw = new \ImagickDraw();
    $imagick = new \Imagick();
    $imagick->newImage($width, $height, new \ImagickPixel('none'));
    $draw->setFillColor($color);
    $draw->setFont($font_file);
    $draw->setFontSize($size);
    $draw->setTextEncoding('UTF-8');
    $stringArr = $this->mbStringToArray($text);
    $textHeight = 0;
    $textWidth = 0;
    $charCount = count($stringArr);
    $texts = [];
    foreach ($stringArr as $char) {
        $metrics = $imagick->queryFontMetrics($draw, $char, true);
        $charHeight = $metrics['textHeight'];
        $charWidth = $metrics['textWidth'];
        $textHeight += $charHeight;
        $textWidth += $charWidth;
        $texts[] = ['char' => $char, 'height' => $charHeight, 'width' => $charWidth];
    }

    if ($direction == 2) {
        if ($charCount > 1) {
            $textHeight += ($charCount - 1) * $space;
        }
        $draw->setTextAlignment(\Imagick::ALIGN_CENTER);
        $x = $size / 2;
        if ($textHeight > $height) {
            $offset = 0;
        } else {
            $offset = ($height - $textHeight) / 2;
        }
        $y = $offset;
        foreach ($texts as $c) {
            $y += $c['height'];
            $draw->annotation($x, $y, $c['char']);
            $y += $space;
        }
    } else {
        if ($charCount > 1) {
            $textWidth += ($charCount - 1) * $space;
        }
        $metrics = $imagick->queryFontMetrics($draw, $text, false);
        $y = $metrics['ascender'];
        $draw->setTextAlignment(\Imagick::ALIGN_LEFT);
        if ($align == \Imagick::ALIGN_CENTER) {
            if ($textWidth > $width) {
                $x = 0;
            } else {
                $x = ($width - $textWidth) / 2;
            }
        } elseif ($align == \Imagick::ALIGN_RIGHT) {
            $x = $width - $textWidth;
        } else {
            $x = 0;
        }
        foreach ($texts as $c) {
            $draw->annotation($x, $y, $c['char']);
            $x += $c['width'] + $space;
        }
    }
    $imagick->setImageFormat("png");
    $imagick->drawImage($draw);

    header("Content-Type: image/png");
    echo $imagick->getImageBlob();

Vagrant box国内镜像及本地安装教程

Vagrant是非常好的本地开发环境搭建工具。

通常使用官方下载都会比较慢,而国内box下载地址较少,所以我特别下载了几个传到百度网盘。

(目前官方已支持CDN加速,可能不太需要了)

国内镜像下载

官方直接下载

官方已经采用cdn加速

vagrant box add ubuntu/trusty64
vagrant box add ubuntu/trusty32
vagrant box add generic/ubuntu1804
vagrant box add generic/ubuntu1604

vagrant box add generic/centos7
vagrant box add generic/centos8
vagrant box add generic/centos8

vagrant box add generic/debian8
vagrant box add generic/debian10

下载后的使用方法

添加vagrant box到box list

vagrant box add centos7 CentOS-7.box

初始化一个虚拟机使用刚才添加的vagrant box

vagrant init centos7

启动vagrant box虚拟机

vagrant up

PHP生成一个透明背景的PNG图像(GD+Imagick)

使用GD

    header('Content-Type:image/png');
    $width = 300;
    $height = 300;
    $color = 'ff0000';
    $font_file = 'size.ttf';

    $im = imagecreatetruecolor($width, $height);
    $bg = imagecolorallocatealpha($im, 0, 0, 0, 127);
    imagefill($im, 0, 0, $bg);
    imagefttext($im, 33, 0, 150, 150, $color, $font_file, 'test');
    imagesavealpha($im, true);
    imagepng($im);
    imagedestroy($im);

使用imagick

    $draw = new \ImagickDraw();
    $imagick = new \Imagick();
    $imagick->newImage($width, $height, new \ImagickPixel('none'));
    $draw->setFillColor($color);
    $draw->setFont($font_file);
    $draw->setFontSize($size);
    $draw->setTextEncoding('UTF-8');
    $draw->annotation($x, $y, $text);
    header("Content-Type: image/png");
    echo $imagick->getImageBlob();

使用Vagrant+CentOS 7搭建PHP7开发环境(含centos7.box直接下载地址)

Vagrant是一款基于命令行的虚拟机管理软件,可以用来快速部署统一的开发环境。

下载Vagrant

https://www.vagrantup.com/downloads.html

下载CentOS 7 Box

官方box下载地址

https://app.vagrantup.com/boxes/search

第三方box下载地址

http://www.vagrantbox.es/

使用原生下载

https://app.vagrantup.com/centos/boxes/7

vagrant init centos/7
vagrant up

vagrant 配置

  config.vm.network "public_network", ip: "192.168.31.245"
  config.vm.synced_folder "d:/data", "/data"
  config.vm.synced_folder "d:/phpcode", "/phpcode"

通过下载工具下载centos 7 box

官方box文件下载地址:http://cloud.centos.org/centos/7/vagrant/x86_64/images/

百度网盘box文件下载地址

  • CentOS 7: https://pan.baidu.com/s/1kVlAz59

添加并运行box

vagrant box add centos7 CentOS-7.box
vagrant init centos7
vagrant up

基础系统安装

基本系统安装

vagrant ssh
sudo passwd vagrant
sudo yum groupinstall "Development tools" -y
sudo yum install vim gcc kernel-devel kenel-devel-`uname -r`

禁止selinux

sudo setenforce 0 

sudo vi /etc/selinux/config

SELINUX=disabled

停止防火墙

sudo systemctl disable firewalld
sudo systemctl stop firewalld

更新系统

sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
sudo yum install yum-utils
sudo yum-config-manager --enable remi-php72
sudo yum update
sudo yum install php-gd php-pdo php-opcache php-fpm php-pecl-redis php-pecl-mysql php-pecl-mysql php-mbstring php-intl php-cli php-xml
sudo yum install nginx -y
sudo yum install mariadb mariadb-server -y

修改nginx配置

mkdir /data/log/nginx /data/run/nginx -p
sudo service nginx stop 
sudo vim /etc/nginx/nginx.conf

nginx.conf配置修改如下:

user vagrant;
error_log /data/log/nginx/error.log;
pid /data/run/nginx/nginx.pid;

access_log  /data/log/nginx/access.log  main;

include /data/phpcode/projectname/vagrant/nginx/app.conf;

测试nginx配置

sudo nginx -t

修改nginx service配置:

sudo vim /usr/lib/systemd/system/nginx.service

nginx.service修改内容如下:

[Service]
PIDFile=/data/run/nginx/nginx.pid

重新加载service

sudo systemctl daemon-reload
sudo systemctl start nginx

修改PHP配置

mkdir  /data/run/php-fpm/session /data/run/php-fpm/wsdlcache /data/run/php-fpm/opcache /data/log/php-fpm/ -p
sudo service php-fpm stop
sudo vim /etc/php-fpm.d/www.conf

配置内容

user = vagrant
group = vagrant
php_value[session.save_path]    = /data/run/php-fpm/session
php_value[soap.wsdl_cache_dir]  = /data/run/php-fpm/wsdlcache
php_value[opcache.file_cache]  = /data/run/php-fpm/opcache
php_admin_value[error_log] = /data/log/php-fpm/www-error.log
slowlog = /data/log/php-fpm/www-slow.log
request_slowlog_timeout = 1

重启

sudo service php-fpm stop

配置Mysql

mkdir /data/mysql /data/run/mariadb /data/log/mariadb -p
sudo service mariadb stop
sudo vim /etc/my.cnf

mysqld配置

[mysqld]
datadir=/data/mysql
socket=/usr/lib/mysql/mysql.sock

[mysqld_safe]
log-error=/data/log/mariadb/mariadb.log
pid-file=/data/run/mariadb/mariadb.pid

mysql client 配置

[client]

初始化数据库

sudo /usr/libexec/mariadb-prepare-db-dir mariadb.service

修改systemd配置

sudo vim /usr/lib/systemd/system/mariadb.service

配置内容

User=vagrant
Group=vagrant

重载systemd

sudo systemctl daemon-reload
sudo systemctl start mariadb

修改mysql账号密码

'/usr/bin/mysqladmin' -u root password 'new-password'
'/usr/bin/mysqladmin' -u root -h localhost.localdomain password 'new-password'

# Alternatively you can run:
'/usr/bin/mysql_secure_installation'

配置composer

下载安装文件

php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"

安装

php composer-setup.php

删除安装文件

php -r "unlink('composer-setup.php');"

设置全局路径(windows请按参考文档设置)

sudo mv composer.phar /usr/bin/composer

配置使用国内镜像

composer config -g repo.packagist composer https://packagist.phpcomposer.com