tengine+php5+dz论坛部署

RT~业务上需要跑一个html页面,一个下载业务,和一个dz论坛,并且上反代,且在请求到任何其他奇怪的地址的时候均跳转回首页
这里假设域名是www.abc.com、dl.abc.com、bbs.abc.com
环境上 大致的情况就是:
用户访问公网IP到达机器A
机器A里面开一个虚拟机B
访问A后 通过反代 再请求作为源站的B即可
用到的工具有:tengine、php5(7不行,dz X3.2不支持7)、mysql、DZ UTF-8 简中 X3.2版
简单介绍下,tengine属于nginx的淘宝魔改版本~在nginx上增加了很多新的功能,简单的配置的话参数是一致的
一、安装所需的程序
这里系统仍然是debian(这次是8.5 x64)由于我使用的apt源自带tengine 所以不需要编译安装,直接apt-get即可

apt-get install tengine php5 php5-fpm php5-common php5-gd php5-mysql php5-cli php5-json php5-readline mysql-server-5.5

这些都不解释、也没啥要配置的,mysql那里会让你设置root的密码,设一个就OK
dz的话 请各位自行去官网复制链接 然后wget后unzip即可,这里不做过多说明
这次没用到phpmyadmin,因为安全事故频发,有点不是太放心,况且也没啥需求,导入数据库什么的敲命令也OK的
完事后 mysql 进去 设置个单独的账户给dz用
二、配置dz要用的到的mysql

mysql -u root -p

#登陆mysql

create database bbs;

#创建名为bbs的数据库

grant all privileges on bbs.* to bbs@localhost identified by '123456';

#创建名为bbs的用户,密码为123456,并赋予其对bbs数据库的全部权限
这部分直接从我的第一篇博文里面复制过来的了。。。反正都一样
3、解决第1、2个需求
两者实际是同一个功能,所以合二为一来讲,后者只是没有index而已
首先 创建一个放网页的目录。。。不解释,我们丢到/var/www下面吧,2个目录,一个是HTML的,目录叫www,另一个提供下载的目录叫dl

mkdir /var/www/www /var/www/dl

然后可以先把你需要提供的内容丢到对应目录里,这里我们就touch一个index.htm在www和dl的下面,方便后续测试

touch index.htm
echo hello >> index.htm

分别cp到各自的文件夹,懒得打命令了
之后,编辑tengine的配置文件,由于是nginx的魔改,所以配置文件仍然叫nginx.conf,路径在/etc/nginx

vim /etc/nginx/nginx.conf

这里面大部分东西都不需要你改,基本上只是添加新的东西而已
我们找到开头写着http { 的那一行
然后找到这个大括号的“}”部分(全新的配置文件一般都是在最下面)
之后按下i进入编辑模式,在“}”的上面敲回车空出几行来 粘贴如下内容(以下内容由叼炸天的朋友erevus提供~点击名字可进入他的个人站点,这是一位经验丰富的安全工程师~)

server {
listen 80;
server_name www.abc.com abc.com;
root /var/www/www/;
index index.htm;
}

(空格粘贴过来的时候乱掉了。。。不过不影响,我也没强迫症,你们自己有强迫症的话自己看着办吧2333333)
这一行由于也带上了对php的支持,我懒得删了。。。反正不影响。。。大致注意以下几点:
1、listen 后面跟着端口号 表示监听哪个端口
2、server_name 后面跟着域名 如果是多域名的话(包括www和@)用空格隔开
3、root 后面跟着放着网页的物理路径 不解释
4、index 后面跟着你的index页面的文件名,记得带后缀
5、需要多域名指向多文件夹的话 跟着这个的后面,再复制粘贴一次,然后按照上面1~4的说明,来改成你对应业务的所需即可
然后:wq 保存退出

service tengine restart

理论上不会有任何报错信息,然后直接请求的话 就会发现可以请求到你需要的内容了~
四、上dz
先编辑一下php-fpm,直接安装的里面 缺东西。。。略蛋疼

vim /etc/php5/fpm/php-fpm.conf

直接拉到最下 输入这几行:

listen = 127.0.0.1:9000
listen.allowed_clients = 127.0.0.1
listen.backlog = -1

如果这三个都有了就忽略吧。。。我这里不知道为啥进去后发现这三个参数都没有
第一个是监听的端口
第二个是保证只有127.0.0.1可以访问,如果你这是后端机器 则可能需要修改一下
第三个。。。想不起来了!自行谷歌吧。。。
配置完后
还是和刚才一样,搞个放论坛的目录,这里我们就叫bbs

mkdir /var/www/bbs

然后 把dz丢进去~
这里注意,dz由于权限要求,所以需要你给一下可读可写可删除可改等权限

chmod -R 777 /var/www/bbs/

(这里要注意,我这只是一个为了调通而偷懒的说明,全部777的话有可能会因为有漏洞进而被黑,然后被挂webshell,请各位站长务必注意)
之后编辑一下nginx.conf

vim /etc/nginx/nginx.conf

这里稍加不同,比上面的多了点东西

server {
listen 80;
server_name bbs.abc.com;
root /var/www/bbs/;
index index.htm index.html index.php;
location ~ .*\.php(\/.*)*$ {
include /etc/nginx/fastcgi_params;
fastcgi_index index.php;
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_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
fastcgi_param SCRIPT_NAME $real_script_name;
fastcgi_param PATH_INFO $path_info;
}
}

主要是多了一个fastcgi_pass 这里指向你php刚才设置的listen即可,注意端口和IP都别输错了
完事后:wq保存退出

service tengine restart

重启后 dz的要求是http://你的域名/install 这样访问即可开始论坛初始化
一路下一步 按照说明走 就问题不大了~
五、访问奇怪的地址时跳转回主站(www)
这个挺简单的。。。直接

vim /etc/nginx/nginx.conf

然后复制粘贴如下 还是到http 里面

server {
listen 80 default;
rewrite ^(.*) http://www.abc.com permanent;
}

:wq保存退出,重启服务端即可
然后你可以测试一下 比如浏览器上直接输入IP访问 会发现可以跳转到这里了
六、反向代理
迟来的更新……这一步居然是最简单的。。。
还是添加解析到nginx.conf即可

server {
listen 80;
server_name bbs.bilicraft.com;
access_log /var/log/nginx/bbs.access.log main;
error_log /var/log/nginx/bbs.error.log error;
location / {
proxy_pass http://172.16.1.2:80;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
}
}

其中 proxy_pass写目标机器的IP和端口,保存退出
然后重启一下tengine,顺带一提 nginx也是可以反代的,但是要去掉access_log结尾的main和error_log结尾的error,nginx不认这俩的,不去掉重启会报错
这样就全部完成啦~

MySQL 重设密码

某MC服把服务器上mysql的root密码居然给忘了。。。
于是。。。搜了一番,找到了这样的一个教程:
https://segmentfault.com/a/1190000000412194
一、适合ubuntu/debian的方式
这个方法只能用于ubuntu/debian 系统上,不过好处在于不需要停掉mysql的服务

cat /etc/mysql/debian.cnf

显示的内容是:

# Automatically generated for Debian scripts. DO NOT TOUCH!
[client]
host = localhost
user = debian-sys-maint
password = PASSWORD
socket = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
host = localhost
user = debian-sys-maint
password = PASSWORD
socket = /var/run/mysqld/mysqld.sock
basedir = /usr

我们记下来其中的user和password
然后直接

mysql -udebian-sys-maint -p

回车后输入password里面的密码,成功进入~
然后直接:

use mysql;
update user set password=PASSWORD("newpassword") where User='root';
flush privileges;

全部执行完后就OK了~
二、比较通用的办法
这个办法需要停mysql,不过像是centos之类的可以用这个方法

service mysql stop

以安全模式启动mysql

mysqld_safe --skip-grant-tables --skip-networking &

然后直接登陆,不需要添加-p

mysql -uroot

成功登陆,然后改密码~