亲手创建一台Ubuntu+PHP5+MySQL5+Nginx+openSSL+sshFtp的微信小程序云服务器

小程序要求Request必须SSL连接,一般虚拟主机不支持SSL,自己有云服务器最佳。

系统可以选Ubuntu14 64位
//更新apt-get

sudo  apt-get update

//安装nginx

sudo apt-get install nginx

//选择Y安装
//安装PHP5-fpm

sudo apt-get install php5-fpm

//安装MySQL5

sudo apt-get install mysql-server mysql-client

//过程中输入两次root的密码。
//安装php的各种模块支持

apt-get install php5-mysql php5-curl php5-gd php5-intl php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl

//直接Y,全安装
//设置 php.ini

sudo vi /etc/php5/fpm/php.ini

//使用VI,按i进入insert插入模式。
//找到 #cgi.fix_pathinfo=1
//改成 cgi.fix_pathinfo=0
//记得去掉前面的注释。
//按大写的Q,输入w保存,输入q退出。
//接下来修改nginx配置。直接添加一个配置即可。

sudo vi /etc/nginx/conf.d/my.conf

//生成一个 xxxx.conf ,无所谓文件名,扩展名是conf就会被引用。
//输入下面的内容:

server {
    listen 80;
    listen 443 ssl;
    root /我的www目录;
    ssl on;
    ssl_certificate /etc/ssl/private/1_api.我的域名.com_bundle.crt;
    ssl_certificate_key /etc/ssl/private/2_api.我的域名.com.key;

    index index.php index.html;
    server_name api.我的域名.com;
    error_log /var/log/nginx/error.log;
    location ~ \.php$ {
            #fastcgi_pass 127.0.0.1:9000;
            # With php5-fpm:
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_index index.php;
            include fastcgi_params;
    }
}

//里面中文的部分自己修改成自己的,暂时没有证书文件,别急,等下告诉你怎么弄。
//PHP基本不需要修改啥,但是常规的话呢,建议修改一下上传文件的大小,默认2M,可以修改为20M以上,现在的图片都大,网络也好啊。
//nginx配置好了,PHP好了,mysql好了,就差重启了,但是还缺少 SSL
//如果输入ssl指令,出现错误,就说明没有安装过ssl,没有的话装一个SSL

sudo apt-get install openssl

//然后,配置证书。必须要颁布的合法证书,自己建立的没有认可的没用的。推荐百度或腾讯云,
//这里使用腾讯云,毕竟都是一家的,
//登录www.qcloud.com ,SSL证书管理功能,你的域名必须已经备案过了,不然依然没有鸟用。
//建立证书时应该输入具体域名,诸如 api.你的域名.com,建立后,可以采用手动DNS验证法,在域名的DNS里建立一个TXT的域名,内容就填写证书要求填写的认证码,比如:

201705031627285aw1fem9slsqalbz55bs2dw055lo4t5aeltehraob4krr2kc94

//然后保存DNS解析,随后5分钟刷新证书,就会查看到证书已经颁发了。
//下载证书,会得到一个你的域名的压缩包,解压后里面有三个操作系统的证书,使用Nginx里面的两个文件,你会惊喜的发现,这两个文件的文件名,和你上面Nginx配置信息里的两个证书名字一毛一样。
//现在的问题就是:如何把证书上传上去了,因为我们没有FTP,我也不会其他方法……
//那我们早晚要传文件,我就建立一个FTP吧,安全点,就建立SFTP,基于SSH的FTP文件传输。
//安装一个sshftp server

sudo apt-get install openssh-server

//安装完服务,我们进行用户建立。

sudo useradd -m 我的用户名 -s /usr/sbin/nologin
sudo passwd 我的用户名

//建立好用户,我们要让用户不能登录ssh,于是编辑/etc/shells

sudo vi /etc/shells

//然后在shells末尾添加:

/usr/sbin/nologin

//按大写Q,w,q,保存退出。
//建立一个ftp的专用组

sudo groupadd ftpaccess

//然后注销sshd_config里面的一行:如下

sudo vi /etc/ssh/sshd_config
//注销掉:  Subsystem sftp /usr/lib/openssh/sftp-server
//并在文件末尾添加:
Subsystem sftp internal-sftp
Match group ftpaccess
ChrootDirectory %h
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
//然后保存退出。

//下面我们要把用户放到我们设计好的组里。

sudo usermod -m 我的用户名 -g ftpaccess -s /usr/sbin/nologin
//再建个你自己的目录,记得有权限啊。
sudo mkdir /我的www目录
sudo chown 我的用户名:ftpaccess /我的www目录
很重要:因为设置为 ChrootDirectory %h , 所以,如果登录失败,则是因为 “主目录”的权限问题,要求 %h 必须是所在组为root

//ftp没问题了。重启一下服务器吧:

sudo reboot now

//再启动起来时,FTP是可以使用的。于是连接FTP,使用SFTP登录,进入目录
//上传证书压缩包里的Nginx里的两个证书文件到服务器,然后复制到指定目录:

sudo cp 证书文件  /etc/ssl/private

//重启一切:

sudo service nginx restart
sudo service php5-fpm restart
sudo service mysql restart

现在你可以访问你的服务器了