Nginx 配置笔记

引子

本篇记录学习 nginx 的点滴

主要配置

整合 ThinkPHP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
vim nginx.conf

location / {
root /var/www/html;
index index.html index.php;
# ThinkPHP hide index.php
try_files $uri $uri/ /index.php?s=$uri&$args;
}

location ~ \.php {
root /var/www/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
include fastcgi.conf;
}

设置 HTTPS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
ssl_certificate server.crt; # 注意 bundle.crt
ssl_certificate_key server.key;

# 强制 HTTPS

server {
listen 80;
rewrite ^(.*)$ https://$host$1 permanent;
}

server {
listen 443;
# blahblah....
}

参考资料

https://s.how/nginx-ssl/

Ubuntu14.04 导入第三方源安装 LNMP 堆栈

引子

编译安装的缺点是, 操作麻烦, 针对不同衍生版本有不同的操作.
本篇记录在 Ubuntu 下通过导入第三方源来安装 LAMP 堆栈.

MariaDB
https://downloads.mariadb.org/mariadb/repositories/#mirror=tuna&distro=Ubuntu&distro_release=trusty--ubuntu_trusty&version=10.1

1
2
3
4
5
6
apt-get install software-properties-common
apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db
add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://mirrors.tuna.tsinghua.edu.cn/mariadb/repo/10.1/ubuntu trusty main'

apt-get update
apt-get install mariadb-server

PHP
https://launchpad.net/~ondrej/+archive/ubuntu/php

1
2
3
4
5
6
add-apt-repository ppa:ondrej/php

apt-get update
apt-get install php5.6 php5.6-mysql php5.6-mbstring php5.6-curl php5.6-gd php5.6-fpm

apt-get install php7.1 php7.1-mysql php7.1-mbstring php7.1-curl php7.1-gd php7.1-fpm

nginx

1
2
3
4
add-apt-repository ppa:nginx/stable

apt-get update
apt-get install nginx

附几个国内镜像源

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
vim /etc/apt/sources.list

# AliYun
deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse

# Tsinghua
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty main multiverse restricted universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-backports main multiverse restricted universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-proposed main multiverse restricted universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-security main multiverse restricted universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-updates main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-backports main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-proposed main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-security main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-updates main multiverse restricted universe

微信支付那些事

引子

客户需求, 要做微信支付, 之前没有接触过支付接口, 想着不就是调用 API 嘛, 能有多难, 没想到还真的有很多坑, 算是在这里总结吐槽一下吧.

这里暂时不提前辈们讨论过的一些坑, 单纯的只说说我自己遇到的乡村野坑

支付目录

一些带有灵活路由的框架例如 thinkPHP, 在做微信支付的时候, 设置支付授权目录的时候一定要写完整的路由 uri, 不能落下入口文件(通常是 index.php)
我在配置的时候没有写 index.php, 因为我的服务器配置了 Apache 的 rewrite, 可是没想到微信这里还是要求很严格的需要完整的 uri

学到的东西

从这些坑爬出来之后, 不禁反思, 能从中学到什么知识呢

  • jQuery 的 ajax 返回值默认是 string 类型, 除非指定 dataType 为 json, 才会被 js 解析为 json 对象. 这一点我在一开始没有注意, 被恶狠狠的坑了一把.

  • 微信内置浏览器不会自动更新文件缓存, 这意味着如果你修改了 css 或者 js 文件, 需要清理微信缓存才能生效(debugx5.qq.com), 如果是生产环境则需要在引用的时候加上时间戳以强制微信浏览器重新加载此文件

Ubuntu 14.04 编译安装 Tengine + PHP5.6

引子

本篇从头开始讲解Ubuntu下编译安装 Tengine 和 PHP

确保已经安装编译器!

1
apt-get install build-essential -y

懒人专用

1
2
3
4
5
6
7
apt-get install gcc make build-essential libxml2 libxml2-dev openssl bzip2 libbz2-dev curl libpng12-dev libmcrypt-dev -y
apt-get install libcurl4-gnutls-dev -y
apt-get install libcurl4-openssl-dev -y

wget "http://tengine.taobao.org/download/tengine-2.1.2.tar.gz" "ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.39.tar.gz" "http://cn2.php.net/distributions/php-5.6.23.tar.gz"

for tar in *.tar.gz; do tar -zxvf $tar; done

编译 Tengine

ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.39.tar.gz
http://tengine.taobao.org/download/tengine-2.1.2.tar.gz

1
2
3
4
5
6
# 安装依赖
apt-get install openssl libssl-dev -y

# 编译
./configure --with-pcre=/path/to/pcre-8.39
make && make install

编译 PHP

http://cn2.php.net/distributions/php-5.6.23.tar.gz

1
2
3
4
5
6
7
8
9
10
# 安装依赖
apt-get install libxml2 libxml2-dev bzip2 libbz2-dev curl libpng12-dev libmcrypt-dev -y
apt-get install libcurl4-gnutls-dev -y
apt-get install libcurl4-openssl-dev -y

# 编译
./configure --prefix=/usr/local/php --enable-fpm --with-config-file-path=/usr/local/php/etc --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-gettext --enable-mbstring --enable-exif --with-iconv --with-mcrypt --with-mhash --with-openssl --enable-bcmath --enable-soap --with-libxml-dir --enable-pcntl --enable-shmop --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-sockets --with-curl --with-gd --with-zlib --enable-zip --with-bz2 --without-sqlite3 --without-pdo-sqlite --with-pear --enable-opcache --with-fpm-group=www-data --with-fpm-user=www-data

make && make install

安装完毕之后, 开始配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 配置php-fpm
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf

# 整合nginx+php
vim nginx.conf

location / {
root /var/www/html;
index index.html index.php;
}

location ~ \.php$ {
root /var/www/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $DOCUMENT_ROOT$fastcgi_script_name;
include fastcgi_params;
}

MySQL 相关

使用apt-get install mysql-server 之后, 发觉mysql_connect()这类函数会报错, 提示

mysql_connect(): [2002] No such file or directory

这是表示没有找到mysql.sock文件, 只需去mysql的my.cnf中找一下真实路径, 然后做一下软连接即可, 也可能是mysqld.sock.

ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sock

这个是4.6版本, 仅支持5.5以及以上的 mysql :
https://files.phpmyadmin.net/phpMyAdmin/4.6.3/phpMyAdmin-4.6.3-all-languages.tar.gz

另外, 如果使用 apt-get 安装的 mysql5.6, 则需要确定机器内存大于 2GB
或者使用 swap, 否则会安装失败

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
On Ubuntu 14.04, I do the following to solve the problem:

Create a 4G swap file:
sudo fallocate -l 4G /swapfile

Change its permission to only root could access and change:
sudo chmod 600 /swapfile

Make it swap:
sudo mkswap /swapfile

Activate:
sudo swapon /swapfile

Now you can try install mysql again, it should success this time. Just remember to remove the previous unsuccessful installation before you do so.

OPcache

需要如下配置才能启用 OPcache :

1
2
3
4
5
6
7
8
9
10
vim php.ini

zend_extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/opcache.so

opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=5000
opcache.revalidate_freq=60
opcache.fast_shutdown=1

整合ThinkPHP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
vim nginx.conf

location / {
root /var/www/html;
index index.html index.php;
# ThinkPHP hide index.php
try_files $uri $uri/ /index.php?s=$uri&$args;
}

location ~ \.php {
root /var/www/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
set $path_info "";
set $real_script_name $fastcgi_script_name;
if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
set $real_script_name $1;
set $path_info $2;
}
fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
fastcgi_param SCRIPT_NAME $real_script_name;
fastcgi_param PATH_INFO $path_info;
}

参考资料

http://www.yanshiba.com/archives/727
http://php.net/manual/zh/opcache.installation.php
http://www.th7.cn/system/lin/201410/74518.shtml
http://havee.me/internet/2014-04/nginx-gzip-compression.html
http://blog.csdn.net/tinico/article/details/18033573
http://www.jb51.net/article/82276.htm
http://askubuntu.com/questions/457923/why-did-installation-of-mysql-5-6-on-ubuntu-14-04-fail

CentOS6编译安装Apache2.4 & PHP5.6

引子

作为一个Web开发者, 编译php是看家本领, 而目前互联网上的各种资料皆无法一次搞定编译安装, 故有此文.
本文安装环境是CentOS6.5 64位版本

1
2
3
# cat /proc/version
Linux version 2.6.32-431.el6.x86_64 (mockbuild@c6b8.bsys.dev.centos.org) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) ) #1 SMP Fri Nov 22 03:15:09 UTC 2013

确保已经安装编译器! (吐槽一下yum安装的gcc还是4.4的版本, Ubuntu都已经是4.8了)

1
2
3
yum install gcc
yum install make
yum install gcc-c++

懒人专用

1
2
3
4
5
yum install -y libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel curl curl-devel libpng-devel libmcrypt-devel

wget "http://mirrors.aliyun.com/apache/httpd/httpd-2.4.20.tar.gz" "http://mirrors.aliyun.com/apache/httpd/httpd-2.4.20-deps.tar.gz" "ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.39.tar.gz" "http://cn2.php.net/distributions/php-5.6.22.tar.gz"

for tar in *.tar.gz; do tar -zxvf $tar; done

编译安装Apache

寻思躲懒, 使用yum方式安装Apache, 结果在编译php的时候无法生成libphp5.so文件, 无奈只得老老实实编译.
首先下载源码
http://mirrors.aliyun.com/apache/httpd/httpd-2.4.20.tar.gz
http://mirrors.aliyun.com/apache/httpd/httpd-2.4.20-deps.tar.gz
ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.39.tar.gz
解压之后开始编译(httpd-2.4.20.tar.gz 和 httpd-2.4.20-deps.tar.gz 放到同一个文件夹下)

1
2
3
4
5
6
7
8
9
// pcre

./configure --prefix=/usr/local/pcre
make && make install

// apache

./configure --with-pcre=/usr/local/pcre --enable-so
make && make install

若没有报错, 则表示编译安装成功, 值得注意的是, 此时的默认wwwroot还是编译路径下的htcdocs目录, 需要手动修改到常用的/var/www/html

DocumentRoot "/var/www/html"

此时在/var/www/html目录下新建index.html并写入内容, 在浏览器访问服务器ip能显示写入内容的情况下, 可以判定Apache编译安装成功.

编译安装PHP

重头戏来了, 目前网络上绝大多数关于编译PHP的资料, 都或多或少的有坑, 不能一次成功, 在这篇文章中, 我总结了所有遇到的错误和解决方法, 直接贴上原始命令. 当然首先是下载PHP的源码了, 这里就不再赘述.
http://cn2.php.net/distributions/php-5.6.22.tar.gz

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2/bin/apxs --with-config-file-path=/usr/local/php/etc --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-gettext --enable-mbstring --enable-exif --with-iconv --with-mcrypt --with-mhash --with-openssl --enable-bcmath --enable-soap --with-libxml-dir --enable-pcntl --enable-shmop --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-sockets --with-curl --with-gd --with-zlib --enable-zip --with-bz2  --without-sqlite3 --without-pdo-sqlite --with-pear --enable-opcache

make && make install

1.
Q:
configure: error: xml2-config not found. Please check your libxml2 installation.

A:
yum install libxml2
yum install libxml2-devel

2.
Q:
configure: error: Cannot find OpenSSL's libraries
configure: error: Cannot find OpenSSL's <evp.h>
A:
yum install openssl
yum install openssl-devel
如果继续报错(一般原版centOS不会有这个问题):
find / -name libssl.so
/usr/lib/x86_64-linux-gnu/libssl.so
初步判断它可能只会在 /usr/lib/ 下寻找 libssl.so 文件, 于是:
ln -s /usr/lib/x86_64-linux-gnu/libssl.so /usr/lib
重新编译安装即通过.

3.
Q:
configure: error: Please reinstall the BZip2 distribution

A:
yum install bzip2
yum install bzip2-devel

4.
Q:
configure: error: Please reinstall the libcurl distribution -
easy.h should be in <curl-dir>/include/curl/

A:
yum install curl
yum install curl-devel

5.
Q:
configure: error: png.h not found.

A:
yum install libpng-devel

6.
Q:
configure: error: mcrypt.h not found. Please reinstall libmcrypt.

A:
yum install libmcrypt-devel

暂时只遇到这么多问题, 后续有问题会继续补充.

Apache与PHP的整合

其实做到这里已经差不多完成了, 只需要把二者进行整合, 直接在httpd.conf中添加:

1
2
3
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>

另外需要检测index.php则需要找到这一行并且在后面追加:

DirectoryIndex index.html index.php

接着重启Apache, 完成.

MySQL相关

使用apt-get install mysql-server 之后, 发觉mysql_connect()这类函数会报错, 提示

mysql_connect(): [2002] No such file or directory

这是表示没有找到mysql.sock文件, 只需去mysql的my.cnf中找一下真实路径, 然后做一下软连接即可, 也可能是mysqld.sock.

ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sock

另外这里注意一下centOS6的一个坑
yum安装的mysql是5.1版本的, 所以只能使用phpMyAdmin4.0系列版本才行:
https://files.phpmyadmin.net/phpMyAdmin/4.0.10.15/phpMyAdmin-4.0.10.15-all-languages.tar.gz
这个是4.6版本, 仅支持5.5以及以上的mysql:
https://files.phpmyadmin.net/phpMyAdmin/4.6.2/phpMyAdmin-4.6.2-all-languages.tar.gz

后记

CentOS有一个小坑在防火墙这块, 导致网页无法访问

1
2
关闭命令: service iptables stop 
永久关闭防火墙: chkconfig iptables off

整个编译过程加上资料查阅差不多花费了近2小时, 主要是一些Linux的基本命令不熟悉, 大部分时间消耗在查询基本命令的文档上面了, 以后要多注意这方面~

参考资料

http://www.2cto.com/os/201404/294000.html
http://blog.csdn.net/tianguokaka/article/details/19086789
http://my.oschina.net/megan/blog/325040
http://blog.knowsky.com/192286.htm

Ubuntu14.04 & CentOS6.5 编译安装Apache & PHP5.6

引子

作为一个Web开发者, 编译php是看家本领, 而目前互联网上的各种资料皆无法一次搞定编译安装, 故有此文.
本文安装环境是Ubuntu14.04 64位版本 & CentOS6.5 64位版本

确保已经安装编译器!

1
2
3
apt-get install gcc
apt-get install make
apt-get install build-essential
1
2
3
yum install gcc
yum install make
yum install gcc-c++

懒人专用

1
2
3
4
apt-get update
apt-get install gcc make build-essential libxml2 libxml2-dev openssl bzip2 libbz2-dev curl libpng12-dev libmcrypt-dev -y
apt-get install libcurl4-gnutls-dev -y
apt-get install libcurl4-openssl-dev -y
1
yum install -y libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel curl curl-devel libpng-devel libmcrypt-devel
1
2
3
wget "http://mirrors.aliyun.com/apache/httpd/httpd-2.4.20.tar.gz" "http://mirrors.aliyun.com/apache/httpd/httpd-2.4.20-deps.tar.gz" "ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.39.tar.gz" "http://cn2.php.net/distributions/php-5.6.23.tar.gz"

for tar in *.tar.gz; do tar -zxvf $tar; done

编译安装Apache

首先下载源码

http://mirrors.aliyun.com/apache/httpd/httpd-2.4.20.tar.gz
http://mirrors.aliyun.com/apache/httpd/httpd-2.4.20-deps.tar.gz
ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.39.tar.gz

解压之后开始编译

1
2
3
4
5
6
7
# pcre
./configure --prefix=/usr/local/pcre
make && make install

# httpd
./configure --enable-so --with-pcre=/usr/local/pcre
make && make install

若没有报错, 则表示编译安装成功, 值得注意的是, 此时的默认wwwroot还是编译路径下的htcdocs目录, 需要手动修改到常用的/var/www/html

DocumentRoot "/var/www/html"

此时在/var/www/html目录下新建index.html并写入内容, 在浏览器访问服务器ip能显示写入内容的情况下, 可以判定Apache编译安装成功.

编译安装PHP

重头戏来了, 目前网络上绝大多数关于编译PHP的资料, 都或多或少的有坑, 不能一次成功, 在这篇文章中, 我总结了所有遇到的错误和解决方法, 直接贴上原始命令. 当然首先是下载PHP的源码了, 这里就不再赘述.
http://cn2.php.net/distributions/php-5.6.23.tar.gz

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2/bin/apxs --with-config-file-path=/usr/local/php/etc --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-gettext --enable-mbstring --enable-exif --with-iconv --with-mcrypt --with-mhash --with-openssl --enable-bcmath --enable-soap --with-libxml-dir --enable-pcntl --enable-shmop --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-sockets --with-curl --with-gd --with-zlib --enable-zip --with-bz2  --without-sqlite3 --without-pdo-sqlite --with-pear --enable-opcache

make && make install

1.
Q:
configure: error: xml2-config not found. Please check your libxml2 installation.

A:
apt-get install libxml2
apt-get install libxml2-dev

yum install libxml2
yum install libxml2-devel

2.
Q:
configure: error: Cannot find OpenSSL's libraries

A:
apt-get install openssl
如果继续报错:
find / -name libssl.so
/usr/lib/x86_64-linux-gnu/libssl.so
初步判断它可能只会在 /usr/lib/ 下寻找 libssl.so 文件, 于是:
ln -s /usr/lib/x86_64-linux-gnu/libssl.so /usr/lib
重新编译安装即通过.

yum install openssl
yum install openssl-devel

3.
Q:
configure: error: Please reinstall the BZip2 distribution

A:
apt-get install bzip2
apt-get install libbz2-dev

yum install bzip2
yum install bzip2-devel

4.
Q:
configure: error: Please reinstall the libcurl distribution -
easy.h should be in <curl-dir>/include/curl/

A:
apt-get install curl
apt-get install libcurl4-gnutls-dev

yum install curl
yum install curl-devel

5.
Q:
configure: error: png.h not found.

A:
apt-get install libpng12-dev

yum install libpng-devel

6.
Q:
configure: error: mcrypt.h not found. Please reinstall libmcrypt.

A:
apt-get install libmcrypt-dev

yum install libmcrypt-devel

7.
Q:
configure: error: Cannot find OpenSSL's <evp.h>

A:
apt-get install libcurl3-openssl-dev

暂时只遇到这么多问题, 后续有问题会继续补充.

Apache与PHP的整合

其实做到这里已经差不多完成了, 只需要把二者进行整合, 直接在httpd.conf中添加:

1
2
3
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>

另外需要检测index.php则需要找到这一行并且在后面追加:

DirectoryIndex index.html index.php

接着重启Apache, 完成.

MySQL相关

使用apt-get install mysql-server 之后, 发觉mysql_connect()这类函数会报错, 提示

mysql_connect(): [2002] No such file or directory

这是表示没有找到mysql.sock文件, 只需去mysql的my.cnf中找一下真实路径, 然后做一下软连接即可, 也可能是mysqld.sock.

ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sock

另外这里注意一下centOS6的一个坑
yum安装的mysql是5.1版本的, 所以只能使用phpMyAdmin4.0系列版本才行:
https://files.phpmyadmin.net/phpMyAdmin/4.0.10.15/phpMyAdmin-4.0.10.15-all-languages.tar.gz
这个是4.6版本, 仅支持5.5以及以上的mysql:
https://files.phpmyadmin.net/phpMyAdmin/4.6.3/phpMyAdmin-4.6.3-all-languages.tar.gz

后记

CentOS有一个小坑在防火墙这块, 导致网页无法访问

1
2
关闭命令: service iptables stop 
永久关闭防火墙: chkconfig iptables off

整个编译过程加上资料查阅差不多花费了近2小时, 主要是一些Linux的基本命令不熟悉, 大部分时间消耗在查询基本命令的文档上面了, 以后要多注意这方面~

参考资料

http://www.2cto.com/os/201404/294000.html
http://blog.csdn.net/tianguokaka/article/details/19086789
http://my.oschina.net/megan/blog/325040
http://blog.knowsky.com/192286.htm

Ubuntu下Apache配置SSL笔记

引言

本来以为这类教程很成熟的照搬就可以用的, 但是实际操作之后还是有些许问题, 故有此文, 本文暂且不讨论各个文件的作用, 只单纯讨论配制方法.

步骤

首先需要在主机上生成CSR文件和KEY文件, 这里需要注意的是
common name 需要填写域名, 如果不是wildcard认证需要带上www前缀.
生成完毕就可以发给认证机构来进行认证了.
认证成功后机构会发给你这么几个文件(我在COMODO认证的)

1
2
3
4
AddTrustExternalCARoot.crt
COMODORSAAddTrustCA.crt
COMODORSADomainValidationSecureServerCA.crt
你的域名.crt

首先需要合并crt文件:

# cat COMODORSADomainValidationSecureServerCA.crt COMODORSAAddTrustCA.crt AddTrustExternalCARoot.crt > bundle.crt

用下面的命令确保ssl模块已经加载进apache了:

# a2enmod ssl

如果你看到了“Module ssl already enabled”这样的信息就说明你成功了,如果你看到了“Enabling module ssl”,那么你还需要用下面的命令重启apache:

# service apache2 restart

另外, 如果你是编译安装的Apache, 则需要在httpd.conf中去掉mod_ssl的注释以及mod_socache_shmcb的注释, 另外还要在extra目录下编辑httpd-ssl.conf, 这些都是和用apt-get方式安装所不同的地方


到了这里就是关键的部分了, 网上的教程大多不适合Ubuntu下的Apache配置, 我来总结一下我自己的经验.

首先配置Apache的ssl配置文件:

# vim /etc/apache2/sites-available/default-ssl.conf

找到

1
2
3
SSLCertificateFile /path/to/crt-file
SSLCertificateKeyFile /path/to/key-file
SSLCACertificateFile /path/to/bundle.crt-file

按需修改之后, 再进行软连接 (如果是编译安装则是去httpd-ssl.conf中去掉include httpd-ssl.conf的注释)

# ln -s /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/default-ssl.conf 

大功告成, restart一下Apache, 尽情享用吧~

Apache 使用rewrite模块强制走 https 配置:
.htaccess文件:

1
2
3
RewriteEngineOn
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)?$ https://%{SERVER_NAME}/$1 [R=301,L]

参考资料

http://www.linuxidc.com/Linux/2015-02/113588.htm