PHP+Nginx+MySQL搭建网站简易教程(以Centos7为例)

准备工作

  • 一台vps

  • 一个域名并做好域名解析(本人在godaddy 购买的),解析之后ping域名,如果返回的是vps的ip,则域名解析成功。如图:


    image
  • 一个SSL证书,个人网站免费的Let's Encrypt即可(申请过程后面讲)。

安装PHP7.0及其扩展

  • 更新yum源
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
  • 安装PHP7.0(php70w-common,php70w-fpm,php70w-mysqlnd必须必须安装)
yum install php70w-common php70w-fpm php70w-opcache php70w-gd php70w-mysqlnd php70w-mbstring php70w-pecl-redis php70w-pecl-memcached php70w-devel
  • 版本验证
php -v
  • 查看显示,如图则成功。


    image

安装MySQL

  • 安装wget(顺便吐槽CentOS)
yum install wget
  • 下载MySQL源包
wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm
  • 安装MySQL源包
yum localinstall mysql57-community-release-el7-8.noarch.rpm
  • yum安装MySQL
yum install mysql-community-server
  • 启动MySQL服务(如不报错则为成功)
systemctl start mysqld

修改Mysql root密码

mysql安装完成之后,在/var/log/mysqld.log文件中给root生成了一个默认密码。通过下面的方式找到root默认密码,然后登录mysql进行修改。

  • 输入如下命令
grep 'temporary password' /var/log/mysqld.log

返回的字符串就是默认生成的密码。如图:


image
  • 输入以下命令并输入默认密码进入MySQL。
mysql -uroot -p
  • 输入以下命令修改密码。
set password for root@localhost = password('新密码');
  • 刷新权限
flush privileges;

编译安装Nginx

选择编译安装Nginx的理由

因为nginx功能强大,模块众多,所以自己需要了解究竟需要什么模块,实现那些功能,这就需要我们自己定制Nginx,编译安装满足高自定义性,故采用编译安装。

编译教程

  • 下载Nginx源码
wget http://nginx.org/download/nginx-1.14.0.tar.gz
  • 解压并进入nginx目录,如图则正确
tar -zxvf nginx-1.14.0.tar.gz && cd nginx-1.14.0 && ls
image
  • 安装所需环境
yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel
  • 生成MakeFile,如图则成功(--with-http_v2_module为http 2.0模块,--with-http_ssl_module为SSL模块,尤为重要)
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-stream --with-stream_ssl_module --with-http_v2_module --with-threads
  • 编译及安装,如图则成功
make && make install
image
  • 启动nginx

    输入如下命令并在浏览器输入ip或域名,如能正常访问网页,恭喜安装成功啦!

/usr/local/nginx/sbin/nginx

Nginx基础使用

Nginx相关文件路径

  • 主文件:/usr/local/nginx/sbin/nginx

  • 配置文件:/usr/local/nginx/conf/nginx.conf</span>

  • 日志文件:
    /usr/local/nginx/logs/error.log (错误日志)
    /usr/local/nginx/logs/access.log (成功文件)

Nginx相关操作

启动

/usr/local/nginx/sbin/nginx

重启

/usr/local/nginx/sbin/nginx -s restart

关闭

/usr/local/nginx/sbin/nginx -s stop

查看配置文件

nano /usr/local/nginx/conf/nginx.conf

查看出错日志

nano /usr/local/nginx/logs/error.log

nginx.conf简单解读(写法很多)

server {
    listen       80; #监听80端口,接收http请求
    server_name  bugprogrammer.tk; #就是网站地址
    root /var/www/phpmyadmin; # 准备存放代码工程的路径
    #路由到网站根目录bugprogrammer.me时候的处理
    location / {
        index index.php; #跳转到bugprogrammer.tk/index.php
        autoindex on;
    }   

    #当请求网站下php文件的时候,反向代理到php-fpm
    location ~ \.php$ {
        include /usr/local/etc/nginx/fastcgi.conf; #加载nginx的fastcgi模块
        fastcgi_intercept_errors on;
        fastcgi_pass   127.0.0.1:9000; #nginx fastcgi进程监听的IP地址和端口
    }
}

php-fpm+Nginx整合配置

修改nginx.conf

取消首行user以及php-fpm模块前的注释,并修改网站目录(注意主服务和php-fpm都要修改),如图:


image

image

在网站目录(上图为phpmyadmin目录)新建一个index.php文件,并粘贴如下代码(伟大的Hello World!!!)

<html>
 <head>
  <title>PHP 测试</title>
 </head>
 <body>
 <?php echo '<p>Hello World</p>'; ?>
 </body>
</html>

启动php-fpm

service php-fpm start

启动Nginx(见Nginx相关操作)并在浏览器输入域名或ip测试,如下及成功。

image

建立网站(以phpmyadmin为例)

  • 下载phpmyadmin最新版并解压到网站目录下,如图:


    image
  • 重启nginx并测试网站

相关错误以及解决方案

常见错误1,如图

image

这个错误的原因是phpmyadmin找不到sesson的存放路径,所以在浏览器允许session的情况下需要调整php的配置文件php.ini

解决方案
  • 打开php.ini(路径为),并添加如下参数
session.save_path = "/var/lib/php/session"
  • 创建sesson存储目录,给予读写权限,并调整所属用户即可解决
mkdir /var/lib/php/session && chmod -R 777 /var/lib/php/session && chown -R nobody:nobody /var/lib/php/session

常见错误2,如图

image
解决方案

进入phpmyadmin目录下将config.sample.inc.php文件改名为config.inc.php并打开,将cfg['Servers'][i]['host'] = 'localhost'改为
cfg['Servers'][i]['host'] = '127.0.0.1'并保存,命令及图解如下:

cd /var/www/phpmyadmin && mv config.sample.inc.php config.inc.php && nano config.inc.php
image

常见错误3,如图

image
解决方案

同(2)打开config.inc.php,找到$cfg['blowfish_secret'] = '',在引号中填写短语密码,推荐填写UUID,如图:


image

常见错误4,如图

image
解决方案

创建tmp文件夹并给予读写权限即可

mkdir tmp && chmod 777 tmp

阶段成果

image

image

后续优化(前提是按照我的教程编译安装的Nginx,注意SSL和HTTP 2.0模块)

升级https

  • 关闭Nginx</span>
/usr/local/nginx/sbin/nginx -s stop
  • 获得Let's Encrypt官方客户端并进入相应目录(如果没有安装git请先yum install git)
git clone https://github.com/letsencrypt/letsencrypt && cd letsencrypt
  • 申请SSL证书,请按要求填写域名,邮箱,最后一张图代表成功,申请后路径在/etc/letsencrypt/live/域名/,一共4个文件
./certbot-auto certonly
image

image
  • 修改Nginx.conf,添加SSL支持。
server {

    listen 443 ssl;
    server_name 域名;
    …

    ssl on;
    ssl_certificate /etc/letsencrypt/live/域名/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/域名/privkey.pem;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ‘EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH’;

    …

}
  • 启动Nginx,分别用http://域名和https://域名测试网站,如果https可以进入,http不能进入,你就成功一半了。

  • 实现http自动跳转到https

新建如下server即可
server {
    listen 80;
    server_name 域名;
    return 301 https://$host$request_uri;
}
  • 用http://域名测试网站,如果能自动跳转https则成功。


    image

(更新)SSL通配符版本申请

一个天大的好消息,Let's Encrypt已经发布了通配符版本SSL证书。顾名思义,通配符SSL证书不再需要为每一个二级域名重复申请SSL证书,以域名bugprogrammer.tk为例,只需要申请*.bugprogrammer.tk以及bugprogrammer.tk即可用于根域名以及所有二级域名,非常方便。申请教程如下。

  • 获取最新版Let's Encrypt客户端
wget https://get.acme.sh
  • 申请通配符SSL证书,按要求输入邮箱,同意条款等操作,如图。
./certbot-auto certonly  -d *.bugprogrammer.tk -d bugprogrammer.tk --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory
image
  • 至关重要的步骤,按如下图操作,在域名DNS设置处添加TXT类型解析,如下图即为:name:_acmechallenge
    value:UYgQnnncMwZ9Z_Ja1mtkbTmayZP_5IDQcXgWIWlyY8w。

    添加解析后回车继续。因为我们同时申请了*.bugprogrammer.tk以及bugprogrammer.tk,所以会出现两个解析要求。
    image

    image
  • 如下图即为成功


    image

升级http2

  • 打开nginx.conf,在listen 443 ssl后面加上http2并重启nginx


    image
  • 打开https://myssl.com/http2_check.html,输入域名检测是否成功,成功如图:

    image

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容