使用LNMP架构搭建动态网站

LNMP:Linux系统下Nginx+Mysql+PHP这种网站服务器架构

第一步:准备系统、安装服务
配置yum仓库

[root@serverB ~]# cd /etc/yum.repos.d/
[root@serverB yum.repos.d]# vim redhat.repo
[redhat]
name=redhat
baseurl=file:///mnt/cdrom
gpgcheck=0
enabled=1

挂载镜像(使用UUID自动挂载)

[root@serverB ~]# vim /etc/fstab
UUID=2014-05-07-03-58-46-00    /mnt/cdrom       iso9660 defaults        0 0

PHP+nginx安装包
链接:https://pan.baidu.com/s/1Ce5WSjUrZ8Wtu8avx8FQ5A
提取码:tvbs

第二步:搭建nginx的https服务
生成CA私钥

openssl genrsa -out /etc/pki/CA/private/cakey.pem

生成CA自签证书

openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 365

创建文件

touch /etc/pki/CA/{index.txt,serial}
echo 01 > /etc/pki/CA/serial

导入受信任的根证书颁发机构

cat /etc/pki/CA/cacert.pem >> /etc/pki/tls/certs/ca-bundle.crt

生成nginx的私钥

mkdir /etc/nginx/ssl
#openssl genrsa -out /etc/nginx/ssl/nginx.key

生成nginx请求证书(域名要一致)

openssl req -new -key /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.csr -days 365
openssl ca -in /etc/nginx/ssl/nginx.csr -out /etc/nginx/ssl/nginx.crt -days 365

查看证书内容

openssl x509 -in httpd.crt -noout -text

进入/etc/nginx/ssl目录下查看

第三步:修改nginx配置文件

重启服务

如果还没有搭建DNS服务
先编辑/etc/hosts文件

在nginx根目录/etx/nginx/html下先创建一个index.html文件测试网页
访问https://www.rj.com

第四步:安装PHP导入wordpress安装包

再次修改nginx的配置文件,添加以下内容

配置完成后的nginx.conf文件

开启php-fpm服务

访问www.rj.com

第五步:安装mariadb对wordpress用户授权
创建wordpress数据库
对用户进行授权

使用wordpress用户登录测试

刷新网页使用wordpress用户密码登录

搭建过程中遇到的问题
问题一:

发现是php-fpm服务没有打开,打开php-fpm服务就能正常访问

问题二:

在wp-config.php配置文件尾部添加$_SERVER['HTTPS']='on';解决版面错乱问题

问题三:
打开wordpress网页时,显示“连接数据库失败”
使用wordpress用户连接mysql看是否连接上,测试后发现登录不进去,重新对wordpress用户进行授权,就能正常登录。

说明:本文章原创,如果有什么需要纠正的地方或者是一起探讨的问题,给我留言~

nginx配置https证书

nginx搭建简单web站点

修改nginx主配置文件

创建index.html文件

访问

nginx配置https

申请证书

编辑nginx.conf文件

重启服务

编辑/etc/hosts文件

访问https://www.rj.com

windows给linux当ca

主机1
环境:windows server 2008
ip地址:192.168.10.13

主机2
环境:RHEL7
ip地址:192.168.10.11
安装服务:http、https、samba、mod_ssl

进入服务管理器

点击申证书

点击高级证书申请

点击使用base64编码

此处需要证书申请的编码,接下来我们从主机2上去获取证书编码

在主机2上安装samba服务,保证文件能够传输到windows系统。
生成httpd的私钥

生成htppd的请求证书

请求证书的编码(此编码就是主机1中所需要的证书编码)

将证书通过samba共享到主机1

在主机1连接主机2的ip192.168.10.11,查看到共享的证书httpd.csr

复制httpd.csr的内容到网页,并提交申请

进入服务管理器,查看挂起的证书,并颁发证书

在颁发的证书中可以查看到刚才请求id3的证书,查看证书详细信息
点击复制文件

把文件命名为httpd.cer保存到桌面

把桌面上导出的证书复制到共享文件夹

进入主机2
将httpd.cer复制到/etc/httpd/ssl目录下,把httpd.cer重命名为httpd.crt

安装需要用到的mod_ssl模块

编辑httpd的子配置文件
监听80和443端口并写入证书与httpd私钥的路径
(注意:要安装mod_ssl模块)
(注意:对于443端口,在httpd子配置文件中对443端口监听但是不生效,由于在/etc/httpd/conf.d/ssl.conf文件中已开启对443端口的监听,所以443端口被占用,暂时把ssl.conf文件关闭,httpd的子配置文件才能对443端口进行监听。)

在/smbapache目录下写入一个index.html文件

开启httpd并加到自启动项

编辑主机1的hosts文件添加主机2的ip和域名

ping测试

访问https://www.zrp.com

windows server 2008 本地安全策略

配置本地安全策略,使得用户在登陆错误尝试3次之后锁定,锁定时间为5分钟,重置账号锁定计数器为3分钟。

打开本地安全策略

点击”本地策略“

点击”账户锁定策略“

设置账户锁定阈值

设置账户锁定时间和重置账户锁定计数器

windows server 2008 ——文件服务的配置

1.设置共享
(1)右击需要共享的文件夹,点击属性,打开共享


(2)点击高级共享,选中共享此文件夹,单击确定或应用完成共享


(3)文件夹被设置共享后,显示已共享


2.访问共享文件夹
输入有限访问共享文件夹的名称和密码



3.服务器策略
(1)拒绝从网络访问这台计算机


右击属性,在此策略的属性对话框中添加禁止远程访问的用户和组


拒绝访问


(2)本地账户的共享和安全模型


通过网络访问文件服务器的所有用户都需要相同的权限,可以强制其以来宾的身份访问,并为guest账户分配访问共享文件夹的权限


当客户机访问服务器时,不会提示输入用户名和密码,即可以列出服务器上的共享文件夹


(3)使用空白密码的本地账户只允许进行控制台登录


4.设置权限
设置NTFS权限


注意:有效权限是共享权限和NTFS权限的交集(最严格的权限)
5.设置隐藏共享文件夹
(1)如果共享文件夹在用户访问文件服务器不显示,在共享名后面加一个“$”
(2)要访问隐藏的共享文件夹,可以在开始菜单搜索”\服务器或ip地址\共享名“,如“\192.168.199.223\share$”

windows server 2008 R2中的FTP 服务的配置(IIS))

  1. 1.FTP发布服务
    (1)在服务器管理器中添加角色

    (2)选择web服务器

    (3)选择FTP服务

    (4)完成安装
  2. 添加FTP站点

    填写ftp站点名称和物理路径

    ip地址默认选择全部分配
    选择SSL设置
    允许:允许 FTP 服务器支持与客户端的非 SSL 和 SSL 连接。
    需要:需要对 FTP 服务器和客户端之间的通信进行 SSL 加密。
    无: 不需要 SSL 加密选择 无。

    选择身份验证方式
    匿名:允许任何仅提供用户名 anonymous 或 ftp 的用户访问内容。
    基本:需要用户提供有效用户名和密码才能访问内容。
  3. 创建FTP用户和组

    输入用户名和密码


    添加组用户


  4. 设置共享文件夹
    右击ftp文件夹属性

    添加组


  5. 测试
    IE浏览器的设置

    输入ftp组用户密码访问

学习MYSQL笔记分享(五)——数据完整性与表的维护

一、数据完整性约束
定义了完整性约束,MYSQL服务器会随时检测处于更新状态的数据内容是否符合相关的完整性约束,保证数据的一致性与正确性。
定义完整约束性
(1)实体完整性
实体完整性规则指关系的主属性,即主码的组成不能为空,关系的主属性不能为NULL
a.主键约束
每个表只能定义一个主键
键值唯一且不能包含不必要的多余列
一个列名在复合主键的列表中只能出现一次

列的完整性约束:在表中某个列的属性定义后加上PRIMARY KEY

CREATE TABLE ucstomers(
    cust_id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    cust_name char(50) NOT NULL,
    cust_sex int (1) NOT NULL DEFAULT 0,
    cust_addres chars(50) NULL
)
ENGINE=InnoDB;

表的完整性约束:在表中所有列的属性定义后加PRIMARY KEY(index_col_name,...),主键由表中多列构成只能用这种方法

CREATE TABLE customers(
    cust_id int NOT NULL AUTO_INCREMENT,
    cust_name char(50) NOT NULL,
    cust_sex int (1) NOT NULL DEFAULT 0,
    cust_addres chars(50) NULL,
    PRIMARY KEY (cust_id)
)
ENGINE=InnoDB;

b.候选键的约束
候选键值必须唯一,且不能为NULL
候选键与主键之间的区别:
一个表只能有一个主键 ,可以有若干个候选键
定义主键约束时自动产生PRIMARY KEY 索引,定义候选键约束时自动产生UNIQUE索引
(2)参照完整性
参照完整性规则是定义外码和主码之间的引用规则,是对关系间引用数据的一种限制,外码要么空,要么参照关系中的主码值
教师(职工号,姓名,性别,系编号)
系(系编号,系名,办公地点)
reference_option:参照完整性约束的实现策略如下:
- RESTRICT:限制策略,默认使用,违反即拒绝
- CASCADE:级联策略,被参照表中删除或更新记录行时自动删除或更新参照表中的匹配记录行
- SET NULL
- NO ACTION

CREATE TABLE orders(
    order_id int NOT NULL AUTO_INCREMENT,
    order_product char(50) NOT NULL,
    cust_id int NOT NULL,
    order_amount int NOT NULL,
    PRIMARY KEY (order_id),
    FOREIGH KEY (cust_id) REFERENCES customers(cust_id)
    ON DELETE RESTRICT ON UPDATE RESTRICT
);

注意:被参照表必须存在且有主键
被参照表名指定的列或列的组合必须是按照参照表的主键或侯先健
外键允许出现空值
外键列的数目、数据类型必须与被参照的列的数据、数据类型相同
(3)用户定义的完整性
用户定义的完整性:非空约束、CHECK约束、触发器
a.非空约束 NOT NULL
b.CHECK约束 CHECK(expr)

CREATE TABLE orders(
    order_id int NOT NULL AUTO_INCREMENT,
    order_product char(50) NOT NULL,
    cust_id int NOT NULL,
    CHECK(cust_id IN (SELLECT cust_id FROM customers)),
    order_amount int NOT NULL,
    PRIMARY KEY (order_id)
    );
CREATE TABLE orders(
    order_id int NOT NULL AUTO_INCREMENT,
    order_product char(50) NOT NULL,
    cust_id int NOT NULL,
    order_amount int NOT NULL,
    order_price DOUBLE NOT NULL,
    PRIMARY KEY (order_id),
    CHECK(order_amount<=5 AND order_price>=2000)
    );

命名完整性约束

CONSTRAINT [symbol]
CREATE TABLE orders(
    order_id int NOT NULL AUTO_INCREMENT,
    order_product char(50) NOT NULL,
    cust_id int NOT NULL,
    order_amount int NOT NULL,
    order_price DOUBLE NOT NULL,
    CONSTRAINT PRIMARY_KEY_ORDERS PRIMARY KEY(order_id),
    CONSTRAINT FOREIGN_KEY_ORDERS FOREIGN KEY(order_id),
    REFERENCES customers(cust_id)
   ON DELETE RESTRICT ON UPDATE RESTRICT
    )
    //主键约束命名为PRIMARY_KEY_ORDERS,并将它的外键说明命名为FOREIGN_KEY_ORDERS

更新完整性约束

ALTER TABLE orders
DROP CONSTRAINT FOREIGN_KEY_ORDERS;
//删除表orders的参照完整性约束FOREIGN_KEY_ORDERS

添加约束:ALTER TABLE....AND CONSTRAINT...
二、表维护语句
1. ANALYZE TABLE语句:更新、修复索引散列程度

ANALYZE TABLE mysql_test.customers;
  1. CHECK TABLE语句:检查一个或多个表是否错误
CHECK TABLE mysql_test.customers;
  1. CHECKSUM TABLE语句:保证数据一致
CHECKSUM TABLE mysql_test.customers;
  1. OPTIMIZE TABLE语句:重新利用未使用的空间,整理数据文件的碎片
OPTIMIZE TABLE mysql_test.customers;//优化数据库中的表

5.REPAIRE TABLE语句:修复一个或多个损坏的表

REPAIRE TABLE  mysql_test.customers;

学习MYSQL笔记分享(四)——视图

一、视图的概述
视图是由一个或多个表或者视图导出的虚拟表,包含数据行与列。
视图与表的区别:
- 视图是一张虚拟表
- 视图的数据来自定义视图查询引用的真实表,动态生成
- 视图数据存储在引用表中
- 视图是用来查看数据,并不存储数据

视图优点:
- 集中分散数据
- 简化查询语句
- 重用SQL语句
- 保护数据安全
- 共享所需数据
- 更改数据格式
二、创建视图

CREATE [OR REPLACE] VIEW view_name [(column_list)]
AS select statement [WITH CHECK OPTION]
  1. OR PLACE:替换数据库中已有同名视图
  2. view_name:视图名称,数据库中唯一,不能与其他表或视图同名
  3. WITH CHECK OPTION:视图上所进行的修改都需要符合select_statement中所限定的条件
CREATE OR PLACE VIEW mysql_test.customers_view
AS
SELECT * FROM mysql_test.customers
WHERE cust_sex='M'
WITH CHECK OPTION; 
//要求视图包含customers中所有男客户的信息,并且要求保证今后对该视图的修改都必须符合客户性别为男性这个条件

三、删除视图

DROP VIEW [IF EXISTS] view_name...
DROP VIEW IF EXIST content_view;

四、修改视图定义

ALTER VIEW view_name
AS select_statement
=
//先使用DROP VIEW 再使用CREATE VIEW
CREATE OR REPLACE VIEW
ALTER VIEW mysql_test.customers_view
AS
SELECT * FROM mysql_test.customers
WHERE cust_sex='F'
WITH CHECK OPTION; 
//要求视图包含customers中所有女客户的信息,并且要求保证今后对该视图的修改都必须符合客户性别为女性这个条件

五、查看视图定义

SHOW CREATE VIEW view_name;

六、更新视图数据
只有满足可更新条件的视图才能进行更新,需要该视图中的行和基础表的行之间是一对一的关系。
1.使用INSERT语句通过视图向基础表插入数据

INSERT INTO customers_view VALUES(111,'张三','武汉市',NULL);
CREATE VIEW hhh_view AS SELECT * FROM 员工表 WHERE 员工表.性别='女';
//插入新记录:
INSERT INTO hhh_view(姓名,性别,工资) VALUES('张三','男',3000);
//插入操作成功,但不合理
CREATE VIEW hhh_view AS SELECT * FROM 员工表 WHERE 员工表.性别='女' WITH CHECK OPTION;
//插入新纪录:
INSERT INTO hhh_view(姓名,性别,工资) VALUES('张三','男',3000);
//插入操作失败

2.使用UPDATE 语句通过视图修改基础表数据

UPDATE customers_view SET cust_address='上海市';

3.使用DELETE 语句通过视图删除基础表数据

DELETE FROM customers_view
WHERE cust_name='张三';

说明:
1. 创建视图必须有足够访问权限
2. 创建视图的数目没有限制
3. 视可以索引
4. ORDER BY子句可用在视图中
5. 视图不能索引,也不能有关联的触发器,默认值或规则
6. 视图可以和表一起用
7. 部署大量视图前,先进行性能测试