ย้าย blog มารันบน Docker เจอปัญหา WordPress กับ Reverse SSL Proxy

วันนี้ได้ทำการย้าย Blog jane.in.th มารันบน Docker เรียบร้อย โดยใช้ container ต่างๆ ดังนี้

ปัญหามีอยู่ว่า พอรัน WordPress ผ่าน Reverse SSL Proxy แล้ว เดี๊ยง ก็เลยไปค้นเจอวิธีแก้จาก http://codex.wordpress.org/Administration_Over_SSL

โดยแก้ wp-config.php เพิ่มดังนี้

/* สองบรรทัดนี้ เป็น option ไม่ใส่ก็ได้ */
define('FORCE_SSL_LOGIN', true);
define('FORCE_SSL_ADMIN', true);

/* แก้ปัญหา Reverse SSL Proxy */
if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
       $_SERVER['HTTPS']='on';

 

Ceph Object Gateway & S3 API

ลองเล่น Ceph S3 โดยใช้ AWS PHP SDK v2 http://docs.aws.amazon.com/aws-sdk-php/v2/guide/installation.html

ไม่มีอะไร มาแชร์ข้อสังเกตุที่เจอดังนี้

<?php
require 'vendor/autoload.php';


use Aws\S3\S3Client;

/*
* ต้องทำ wildcard ชี้ *.s3.example.com ไปยัง Ceph RadosGW node
* เพราะว่า bucket student.image จะชี้ไปที่ student.image.s3.example.com
*/
$s3 = S3Client::factory([
        'key' => 'photo.student key',
        'secret' => 'photo.student secret',
        'endpoint' => 'http://s3.example.com'  
        ]);

/* สร้าง bucket student.image */
$s3->createBucket(['Bucket' => 'student.image']);


/* 
* ทดสอบตั้งค่า ACL ให้ Bucket โดยที่การ putBucketAcl() จะเป็นการทับ ACL เดิมทั้งหมด
* ดังนั้น จึงต้องใส่ค่า Owner และ Grant Owner ด้วย
*/
$result = $s3->putBucketAcl([
    'Owner' => [
        'DisplayName' => 'Students Photo Bucket',
        'ID' => 'photo.student',
    ],
    'Grants' => [
        [
            'Grantee' => [
              'Type' => 'CanonicalUser',
              'ID' => 'photo.student',
            ],
            'Permission' => 'FULL_CONTROL',
        ],
        /* grant read uid=photo.student.ro ให้ อ่านรายชื่อ object ใน bucket student.image ได้ */
        [
            'Grantee' => [
              'Type' => 'CanonicalUser',
              'ID' => 'photo.student.ro',
            ],
            'Permission' => 'READ',
        ],
    ],
    'Bucket' => 'student.image',
]);

/* dump ACL bucket student.image */
var_dump($s3->getBucketAcl([
    'Bucket' => 'student.image',
]));



/* ทำการ upload test.jpg พร้อมกำหนด ACL */
$s3->putObject([
  'Bucket' => 'student.image',
  'Key'    => 'test',
  'Body'   => fopen("test.jpg", 'r'),
  'GrantRead' => 'id=photo.student.ro',
  'GrantFullControl' => 'id=photo.student',
]);


/* ทดสอบด้วย Read only account */
$s3ro = S3Client::factory([
 'key' => 'photo.student.ro key',
 'secret' => 'photo.student.ro secret',
 'endpoint' => 'http://s3.example.com' 
]);


/* ทำการสร้าง url สำหรับเรียกดู test.jpg โดย url จะมีอายุ 1 นาที */
$command = $s3ro->getCommand('GetObject', [
 'Bucket' => 'student.image',
 'Key' => 'test',
]);
$signedUrl = $command->createPresignedUrl('+1 minutes');
echo "{$signedUrl}\n";