apache为网站配置证书以支持https访问

腾讯云的主机有一个不错的服务,那就是可以免费申请证书,使网站支持https访问。众所周知,现在支持https访问是大趋势,安全性提升了很多。今天在腾讯云申请了一下证书,一下子就审核通过了。下面记录一下我在apache2下配置https的过程。

1.在腾讯云申请证书

地址:https://www.qcloud.com/product/ssl

直接为你的网站申请证书即可:域名型 DV SSL 证书免费申请!

免费版DVSSL证书

2.下载证书

等待腾讯的审核,不一会就会收到短信了。审核通过,就可以下载证书了。

下载地址:https://console.qcloud.com/ssl

下载是一个压缩包,里面有三个文件夹,分别对应三种服务器的证书文件:

三种证书文件

3.安装mod_ssl
如果apache没有安装ssl,则需要安装:
yum install mod_ssl openssl
安装完毕之后,在/etc/httpd/conf.d下,会生成一个ssl.conf文件。
4.在apache下配置https

登陆服务器,将证书文件夹apache里面的三个文件上传到/etc/httpd/conf下,即以下三个文件:

apache证书文件

编辑/etc/httpd/conf.d/ssl.conf

根据你的网站情况,在代码块内,修改基本配置,和80端口的虚拟主机是类似的。只是其中SSLCertificateFileSSLCertificateKeyFileSSLCertificateChainFile则对应步骤2中的3个证书文件:


DocumentRoot “/var/www/html”
ServerName www.domain.com
SSLEngine on
SSLCertificateFile /usr/local/apache/conf/2_www.domain.com.crt
SSLCertificateKeyFile /usr/local/apache/conf/3_www.domain.com.key
SSLCertificateChainFile /usr/local/apache/conf/1_root_bundle.crt

重新启动 Apache:service httpd restart

现在就可以用https访问了。

注:如果出现以下错误:

Starting httpd: (98)Address already in use: make_sock: could not bind to address 0.0.0.0:443
no listening sockets available, shutting down
Unable to open logs
[FAILED]

则可能是443端口被占用,用命令netstat -lnp|grep 443来查看是什么程序占用了这个端口,我的是因为装了vpnserver,所以关掉就行了。

官方文档:https://www.qcloud.com/document/product/400/4143

 

在Centos6.7中将python升级成2.7版本

在Centos6.7中将python升级成2.7版本,网上有一大堆文章,但是要知道,没有永远正确的配置,每台机子,每个软件版本可能都不一样,所以要针对自己的问题,记录,找出对应的原因,才能以不变应万变啊。

不废话了,我这里记录一下在64位centos6.7中将python2.6.6升级为python2.7.12的过程。

1.安装devtoolset

devtoolset可以帮助我们解决gcc编译的问题,而在yum中,我们直接使用groupinstall,就能把工具组给安装了,很方便,输入以下命令:

yum groupinstall "Development tools"

2.安装编译Python需要的包:

yum install zlib-devel
yum install bzip2-devel
yum install openssl-devel
yum install ncurses-devel
yum install sqlite-devel

3.下载python2.7.12:

wget https://www.python.org/ftp/python/2.7.12/Python-2.7.12.tgz

4.解压:

tar -xvf Python-2.7.12.tgz

然后进入该目录:

cd Python-2.7.12

5.开始编译安装三部曲

./configure --prefix=/usr/local --enable-shared
make
make install

如果遇到错误:

error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory

那就新建一个文件:

vim /etc/ld.so.conf.d/python2.7.conf

加入以下内容:

/usr/local/lib

保存退出后运行命令读取配置:

ldconfig

然后再重新编译安装三部曲即可。

看到网上很多教程有说,安装完新版本的python,系统还是用的默认的旧版本,所以需要更改软连接,还有yum的设置。但在我这里并没有遇到,我是可以直接用了,而且yum也正常。可能和python的版本有关,如果你在安装完之后出现,运行python,发现版本仍然是默认的版本,那么你就需要更改软连接了,更改完软连接之后,要检查yum是否正常。

6.安装pip

在windows下,装完python2.7.12会默认把pip也装上。但在linux上有所不同,至少我在完成以上步骤之后,运行pip并没有反应。所以还需要安装pip。直接用yum神器:

yum install python-pip

7.安装python-devel

输入命令安装就行:

yum install python-devel

这就基本上就完成了python的升级。

centos+apache安装wordpress

上一篇《折腾记录:将wordpress搬家到腾讯云》讲到wordpress服务器搬家的坑,但是没有细说怎么安装,这一篇就记录一下怎么在centos上面安装使用wordpresss吧。以下的过程是基于centos6.7的,如软件安装有版本出入(ubuntu里面的apache是apache2,不是httpd),需要自行调整。

1.安装apache

在centos下,一般都使用yum来管理安装包,很方便。安装apache非常简单,输入以下命令即可:

yum install httpd
yum install httpd-devel

开启apache服务:

service httpd start

默认会显示如下提示:

Starting httpd: httpd: Could not reliably determine the server’s fully qualified domain name, using 127.0.0.1 for ServerName

此时需要去更改配置:

vim /etc/httpd/conf/httpd.conf

#ServerName www.example.com:80改为ServerName localhost:80

保存,退出,重启apache服务
service httpd restart

最后再设置一个开机自动启动:
chkconfig httpd on

ok,在浏览器输入服务器的ip,显示如下页面即为安装成功:

apache安装成功

2.安装mysql

输入命令安装mysql-server、mysql和mysql-devel:

yum install -y mysql-server mysql mysql-devel

安装成功,如下图:

mysql安装完成

查看一下mysql的版本:

rpm -qi mysql-server

mysql版本-1

启动mysql服务:

service mysqld start

设置mysql的超级管理员root的密码,引号不要删,引号内为你的密码:
/usr/bin/mysqladmin -u root password 'new-password'

或者在mysql登陆状态下,输入:
use mysql;
update user set password=password('密码') where user='root';
flush privileges;

设置mysql开机启动:
chkconfig mysqld on

如果你还需要在远程的软件操作mysql,那就要开启远程操作权限,在mysql命令行下,输入:
grant all privileges on *.* to 'root'@'%' identified by '密码' with grant option;
flush privileges;

3.安装php

输入命令:

yum install php

安装php

安装php-mysql:
yum install php-mysql

安装常用的php组件:
yum install php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc

安装常用的php组件

重启apache:
service httpd restart

搞定。

4.安装配置wordpress

4.1创建wordpress数据库

先创建一个数据库,用来存放wordpress的数据。可以在navicat-for-mysql里面创建,也可以在登陆mysql之后,用命令行创建(指定utf-8字符集):
CREATE DATABASE `wordpress` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

创建个专门的用户管理这个数据库(username和password改为你要的用户名和密码):
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

将wordpress数据库的所有管理权限交给这个用户:
GRANT ALL ON wordpress.* TO ‘username’@’localhost’;

ok

4.2下载、安装、配置wordpress以及数据库

下载wordpress,可以去官网下载,然后上传到服务器,也可以直接用命令下载,我这里用命令下载(以下是英文版,中文版的话将url改成https://cn.wordpress.org/latest-zh_CN.tar.gz):
wget http://wordpress.org/latest.tar.gz --no-check-certificate

解压到指定的目录下:
tar -zvxf latest.tar.gz -C /website/wp-test

cd进入解压后的文件目录,将wp-config-sample.php复制、重命名为wp-config.php:
cp wp-config-sample.php wp-config.php

修改wp-config.php:
vim wp-config.php

更改数据库的相关设置,更改红色字体处为你自己的数据库设置:

/** 数据库名 */
define(‘DB_NAME’, ‘wordpress‘);

/** mysql用户名 */
define(‘DB_USER’, ‘username‘);

/** 该用户对应的密码 */
define(‘DB_PASSWORD’, ‘password‘);

/** 主机名,默认无需修改 */
define(‘DB_HOST’, ‘localhost’);

/** 字符集 */
define(‘DB_CHARSET’, ‘utf8‘);

/** The Database Collate type. Don’t change this if in doubt. */
define(‘DB_COLLATE’, ”);

4.3apache虚拟主机设置

新建一个虚拟主机配置:
vim /etc/httpd/conf.d/virtual.conf

输入以下配置,记得要先将域名解析到主机的ip地址来:

##wordpress目录
DocumentRoot /website/wp-test/wordpress

ServerName lookfor404.com #你的域名

ServerAlias www.lookfor404.com #域名别名

#开启rewrite功能
<Directory “/website/wp-test/wordpress”>

AllowOverride ALL

Order allow,deny

Allow from all

 

以上配置完成,访问域名,即可开始安装过程。
wordpress安装过程

设置一下账号密码,就可以开启wordpress了。

 

 

折腾记录:将wordpress搬家到腾讯云

由于腾讯云有学生计划,每个月可以有50块的代金券,于是我就愉快地用上了腾讯云的服务器。本来迁移一个wordpress应该是很简单的事情,居然被我折腾了一天!!!整整一天!!所以,还是记录一下吧。

想象中的迁移其实相当简单啊,由于先前已经把apache、php模块、mysql都装好了,只要把数据库和网站文件复制过来,然后改一下wp-config.php就行啦。但没想到的是,由于版本的不一致和权限的问题,我踩了不少坑。

第一坑:mysql版本不一致

在腾讯云,我的系统是centos6.7,mysql是通过yum安装的,看看版本:

rpm -qa | grep mysql

mysql版本

5.1版本的,而我在另外在另外一台服务器上面的mysql是5.6版本的,所以,当我想愉快的用navicat-for-mysql来进行数据传输的时候,出现了编码错误,无法传输。高版本的mysql有这样的排序规则:utf8mb4_unicode_ci,低版本的没有。

所以,我只能去踩第二个坑了。

第二坑:不能直接把数据库搬过来

踩完第一坑,想着说,既然不能这么传输数据库,那我就直接导出sql,然后在新的数据库执行就好了。

导出、导入完毕,然后上传wordpress文件到服务器,更改wp-config.php中的数据库配置。然后配置虚拟主机,重启apache,一切正常。

浏览器输入ip来访问。居然重定向到apache的默认页面去了。很明显,数据库根本连接不了。。

最后的解决方法是,老老实实的,先不导入数据库,让wordpress自己完成安装,把默认的表都建齐了,然后把默认的数据给删掉,最后把之前导出的sql文件里的insert语句重新执行一遍,相当于重新写数据了。

第三坑:固定链接与.htaccess文件

网站的url设计用的是域名+文章名,这个可以在wordpress后台的“固定链接”里面设置。但是我设置了之后,发现居然只有“朴素”模式可以用,采用别的固定链接,都会404。

搜索引擎和wordpress都告诉我,是.htaccess文件的问题。

wordpress的.htaccess文件

于是我在网站根目录下新建了一个.htaccess文件,把它告诉我要填写的内容写进去了,保存。

vim .htaccess

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

然后,在apache的virtual host配置里,加了以下设置,使.htaccess生效:

<Directory “/mypath/wordpress”>
AllowOverride ALL
Order allow,deny
Allow from all
</Directory>

其中,AllowOverride ALL是一定要加的,这个代表使用.htaccess的策略。

但是,问题出现了,加了这个配置之后,图片、css、js等静态文件访问不了了。

经过好久好久的测试,千言万语可以通过以下一行命令解决:

将路径先切换到wordpress网站根目录,然后

chown -R apache:apache ./*

把所有文件的拥有者改成apache,把所属的组改成apache,这样apache就有权限了。这也直接能解决第四个坑

第四坑:在线更新wordpress出错

无论是升级wordpress还是升级插件,总是会出现权限错误,都不成功。

都是权限不足!如果你够暴力,直接全部777权限,解决,但不建议这么做。我最终还是选择了把网站的owner和group都改成了apache,正如坑三所提到的那样。

总结

权限问题!权限问题!权限问题!

这个问题在我配置网站的时候经常有,次次有,所以一定要把系统的各种权限搞懂,不要每次都用root去倒腾一些东西,得不偿失!要建立起良好的权限管理的习惯。

这篇写的思路比较混乱,之后再把之前配置整个服务器的过程记录一下。

在linux服务器上部署django项目

不得不承认,django自带的runserver功能确实强大,使得我们在开发的过程中可以轻松的在本地调试、查看网站。但开发是开发,做的项目总归是要部署到服务器上面去的,最近把项目部署到linux上了,这里记录一下。

官方文档:https://docs.djangoproject.com/en/1.9/howto/deployment/

我是参照着文档部署的。下面是我的环境:

ubuntu14.04.3
python2.7.6
apache2.4.7
django1.9.7
mod_wsgi4.5.3

接下来进入配置环节。

安装python-dev

默认情况下,ubuntu系统是安装了python的,不过如果只用这个python,在后面的部署过程就会出问题,先查看你的python版本,不出意外的话是2.7.x,然后额外安装一个对应的dev版。

apt-get install python2.7-dev

安装django

这个很简单,直接pip安装就行,选择好你要的版本。

pip install Django==1.9.7

安装python的mysql驱动

如果你的数据库用的是mysql,还得安装这个。

sudo apt-get install python-mysqldb

安装Apache

在ubuntu系统上,Apache是预装了的,但是它不支持apxs的,对于之后要安装的wsgi组件来说,apxs是必须的。还得安装一个Apache的dev版。先确认你已经安装的Apache版本,我的是Apache2,所以直接运行以下命令继续安装dev版:

sudo apt-get install apache2-dev

安装编译mod_wsgi

有了上述的准备工作之后,安装mod_wsgi就不是什么问题了。

这个是官方文档:https://modwsgi.readthedocs.io/en/develop/user-guides/quick-installation-guide.html

我记录一下我安装编译的步骤。

先去下载源代码:https://github.com/GrahamDumpleton/mod_wsgi/releases

我下载的是mod_wsgi-4.5.3.tar.gz。

然后上传到服务器,解压:

tar xvfz mod_wsgi-X.Y.tar.gz

PS:X,Y为你实际的文件版本,跟文件名一致即可。

解压之后,cd到对应的目录。然后运行

./configure

./configure命令
然后继续运行:

make

最后运行(PS:这一步是需要管理员权限的):

sudo make install

安装成功:
mod_wsgi安装成功
注意图片的第一行,说的是mod_wsgi安装的路径;还有最后一行,要给mod_wsgi.so加上对应的权限。

sudo chmod 644 /usr/lib/apache2/modules/mod_wsgi.so

配置mod_wsgi到Apache上

安装成功之后,要更改一下Apache的配置文件。编辑(不同系统下Apache配置文件不一样,有的是httpd.conf)

sudo vim /etc/apache2/apache2.conf

在文件的最后一行,加上
LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so
其中第三个参数,是刚才安装完的mod_wsgi.so对应的路径。

部署django项目

django项目刚开始的时候,我们一般都是运行startproject命令来生成项目,这样做有一个好处,django会帮我们自动生成wsgi的配置文件。

首先把本地的django项目复制到服务器上,一般是/var/www/html下,以你Apache的配置为准。

然后我们继续编辑Apache的配置文件:

sudo vim /etc/apache2/apache2.conf

在最后,添加如下内容:

WSGIScriptAlias / /path/to/mysite.com/mysite/wsgi.py
WSGIPythonPath /path/to/mysite.com

Require all granted< /Files>

要注意,/path/to/mysite.com/ 这个路径不要搞错,就是你项目的路径。

配置完毕,重启Apache。

sudo apachectl restart

访问网站
直接输入ip地址访问网站,发现访问不了,查看了一下Apache的error log:

from django.core.wsgi import get_wsgi_application
ImportError: No module named ‘django.core.wsgi’

后来发现,原来是权限问题,无法执行django里面的文件。心累。。

加个权限就行了。

cd /usr/local/lib/python2.7/dist-package
sudo chmod a+x django

ok,项目就这么部署完毕了,如果你是正式的项目,记得把django的debug模式关掉。

WinSCP上传文件出错解决方法

在用WinSCP上传本地文件到/var/www的时候,出现了一个错误:

Permission denied.
Error code: 3
Error message from server: Permission denied

很明显,权限错误。

也就是说,我登陆的这个账号,不能往这个文件夹里面写东西。解决方法也有很多种,无非就是更改权限,或者更改文件归属了。

最暴力的方法:

sudo chmod 777 -R /var/www

其中,-R代表www下的子文件的权限也被更改
或者可以更改文件夹的归属:

sudo chown -R username /var/www/

其中username更改为你登陆WinSCP的用户名即可。

问题是解决了,但是以上方法并不是最好的方法,最好的方法是要根据自己服务器的安全策略,然后给文件夹设定对应的权限,这就涉及到linux的跟权限有关的知识了,这里也整理一下。

文件权限

以以下这个文件为例:

drwxrwxr-x 2 ubuntu ubuntu 4.0K Jul 26 11:58 testdir

一个一个解释。

drwxrwxr-x:有10个字母,第一个字母代表文件的类型,-代表文件,d代表文件夹,l代表链接;剩下9个字母,三个字母分为一组,共有三组。第一组代表文件所有者的相应权限,第二组代表与文件所有者同一组的用户的相应权限,第三组代表其他用户的权限。r代表读权限,w代表写权限,x代表执行权限。

2:代表链接的文件数,有2个。

ubuntu:文件所有者

第二个ubuntu:文件所有者所在组

再后面就是时间和文件名了。

更改文件权限

更改文件权限的基本命令是chmod,这里抛出一个规定,那就是每种权限对应一个数字:r=4,w=2,x=1,所以rwx可以表示为7(4+2+1),rw-可以表示为6(4+2),就是简单的加法。有了这个规定,我们来看命令就很明白了。

chmod 751 abc:赋予abc权限rwxr-x–x

chmod u=rwx,g=rx,o=x abc:同上,u=用户权限,g=组权限,o=不同组其他用户权限

chmod u-x,g+w abc:给abc去除用户执行的权限,增加组写的权限,减号代表去除权限,加号代表增加权限

chmod a+r abc:a代表所有用户,这里是给所有用户添加读的权限

chmod a=rwx abc:这条命令等价于chmod 777 abc

在windows下用ppk后缀文件登陆远程服务器

最近要部署一个项目到服务器上,对方给我生成了一个以ppk为后缀名的密钥,让我直接登陆,这里记录一下过程。

用putty通过ssh登陆服务器

下载putty

貌似官网上不了。我是在这里下载的:

http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

下载putty.exe,不用安装。

连接服务器

打开putty,在host name那里填写服务器地址,登录方式默认就行了。

putty登陆服务器

在左边栏打开选择SSH,找到AUTH,然后Browse你的ppk授权文件,点击open。

导入ppk授权文件

然后输入ppk授权文件对应的linux用户名,即可登陆成功,如下:

putty登陆成功

用WinScp登陆文件服务器

WinScp给了我们图形化的操作界面,允许我们从windows直接拖拽文件到服务器上,非常方便。这里记录下怎么用ppk文件来登陆。

下载、安装WinScp

下载地址:http://winscp.net/eng/download.php

安装过程可以选择语言,默认是中文,我选择的是英文。

使用ppk文件登录

打开软件,在Host name填写服务器地址,Port number默认22即可,User name填写用户名。然后点击下面的advanced选项。

打开winscp

然后选择ssh下的authentication,在private key file选择授权文件(即你的ppk后缀名文件)即可。

winscp选择授权文件

点击ok,然后回到第一个界面,login就行了。

登录成功,可以直接拖拽文件实现上传下载了。

winscp登陆成功

Mysql在linux下的使用以及用java编程

平时管理mysql喜欢用可视化的phpmyadmin,方便易用,简单的事情就不要复杂化。今天在做项目的过程中,发现需要远程连接mysql数据库,虽然说phpmyadmin是可以连接远程的数据库的,但是需要远程的数据库对我这边开启一定的访问权限。

鉴于安全考虑,打消了这个念头。

而想想,自己无非就是想去看看表的结构,select几个字段罢了,那就直接登录直接使用吧,遂把今天的一些操作记录一下吧。

linux下使用mysql

安装就不说了,直接进入主题。

先登录,命令如下:其中,-u后面直接输入用户名,-p后面直接输入密码

mysql -uusername -ppassword

无意外,登录成功。

在这里记录一个坑,那就是登录成功之后,进入mysql的命令行模式,此后输入命令都要以分号;结尾,就和我们日常编程一样,否则输入命令之后,会没有任何错误提示,并且也不会有任何反应。

首先看看有哪些数据库:

show databases;

选择一个数据库,比如我想对数据库名为test的数据库进行操作。

use test;

之后,就是输入各种select语句就行了。最后退出的时候输入命令exit就行。

Java下mysql的使用

首先下载mysql的jdbc驱动,去搜索mysql-connector-java,然后下载。

我搜索到的下载地址:http://dev.mysql.com/downloads/connector/j/

然后新建一个工程,把下载的jar包引进去就行。

随后开始编程,使用很简单,我写了一个简单的example记录一下,操作都大同小异,不过我这里用的不是存储过程,而是基本的sql语句操作。附上代码:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;




public class mysqlExample {
	public static void main(String args[]) {
		try {
			Class.forName("com.mysql.jdbc.Driver"); // 加载MYSQL JDBC驱动程序
			System.out.println("加载驱动成功!");
		} catch (Exception e) {
			System.out.print("加载驱动失败!");
			e.printStackTrace();
		}




		try {
			Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbName", "root", "");
			System.out.println("连接到数据库成功");
			String sql = "select * from `user`;";
			ResultSet rs = getResult(sql,connection);
			//遍历结果,rs是结果游标 
			while(rs.next()) { 
				 /*
				  * getString方法可以传int index,即第几列(1代表结果的第一列..)
				  * 也可以传String columnname,可以直接指定要哪个字段
				  */
				 System.out.println(rs.getString(1));
				 System.out.println(rs.getString("admin"));
				 } 
			 //关闭连接
			connection.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	/**
	 * 获取sql查询结果
	 * @param sql sql语句
	 * @param connection 连接
	 * @return 结果集
	 * @throws SQLException
	 */
	public static ResultSet getResult(String sql,Connection connection) throws SQLException{
		Statement stmt = connection.createStatement();
		ResultSet rs = stmt.executeQuery(sql);
		return rs;
	}
}

Linux下升级python版本-2.7.9

我用的centos,预装着python,版本比较低,是2.6的,而2.7.9以上的版本自带pip,easy_instll和wheel,为了省去安装这些东西的麻烦,我干脆直接重新装一个python2.7.9好了。

这里记录一下升级安装的过程。

首先去官网下载对应的python的tgz文件,在linux下可以直接wget,在windows下直接下载就行,网址:https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tgz

若网址失效,请移步python官网下载。

在linux下,将下载的tgz文件解压到指定目录,运行以下命令:

tar -xvzf Python-2.7.9.tgz -C /home 

解压完成,切换到解压的目录下,运行命令:

./configure

这个命令完成后,会生成makefile文件,供下一步使用。

接下来编译源代码,运行命令:

make

再运行最后一个命令,自动把文件分发的系统的关键位置,命令如下:

make install

等到处理完成,不需要任何更改,直接在命令行输入python,看到如下提示即安装成功:
python升级成功

2.7.9以及以上版本的python都预装了pip,eazy_install,很是方便,之后安装别的包就比较简单了。