笔记11(LNMP)

MySQL安装

卸载原来的mysql步骤

第一步,先进入到src下:

cd /usr/local/src/

第二步,删除

rm -rf /usr/local/mysql

rm -rf /etc/init.d/mysqld

cd /usr/local/src

wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz

tar zxvf mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz

mv mysql-5.6.35-linux-glibc2.5-x86_64 /usr/local/mysql

cd /usr/local/mysql

useradd mysql

mkdir /data/

./scripts/mysql_install_db --user=mysql --datadir=/data/mysql

cp support-files/my-default.cnf  /etc/my.cnf

cp support-files/mysql.server /etc/init.d/mysqld

vi /etc/init.d/mysqld

定义basedir和datadir

/etc/init.d/mysqld start

PHP安装

和LAMP安装PHP方法有差别,需要开启php-fpm服务

cd /usr/local/src/

wget http://cn2.php.net/distributions/php-5.6.30.tar.gz

tar zxf php-5.6.30.tar.gz

useradd -s /sbin/nologin php-fpm

cd php-5.6.30  (make clean可以吧以前的配置信息全部删掉,让他回到刚解压完的状态)

./configure --prefix=/usr/local/php-fpm --with-config-file-path=/usr/local/php-fpm/etc --enable-fpm --with-fpm-user=php-fpm --with-fpm-group=php-fpm --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-pdo-mysql=/usr/local/mysql --with-mysql-sock=/tmp/mysql.sock --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-ftp --enable-mbstring --enable-exif --with-pear --with-curl  --with-openssl

make && make install

cp php.ini-production /usr/local/php-fpm/etc/php.ini

vi /usr/local/php/etc/php-fpm.conf //写入如下内容(参考https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D15Z/php-fpm.conf)

cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm

chmod 755 /etc/init.d/php-fpm

chkconfig --add php-fpm

chkconfig php-fpm on

service php-fpm start

ps aux |grep php-fpm

nginx介绍

Nginx官网 nginx.org,最新版1.13,最新稳定版1.12

Nginx应用场景:web服务、反向代理、负载均衡

Nginx著名分支,淘宝基于Nginx开发的Tengine,使用上和Nginx一致,服务名,配置文件名都一样,和Nginx的最大区别在于Tenging增加了一些定制化模块,在安全限速方面表现突出,另外它支持对js,css合并

Nginx核心+lua相关的组件和模块组成了一个支持lua的高性能web容器openresty,参考http://jinnianshilongnian.iteye.com/blog/2280928

Nginx安装

cd /usr/local/src

wget http://nginx.org/download/nginx-1.12.1.tar.gz

tar zxf nginx-1.12.1.tar.gz

./configure --prefix=/usr/local/nginx

make &&  make install

编辑启动脚本:vim /etc/init.d/nginx //复制如下内容(参考https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D15Z/etc_init.d_nginx )

chmod 755 /etc/init.d/nginx

chkconfig --add nginx

chkconfig nginx on

配置它的配置文件:先进去,cd /usr/local/nginx/conf/; 再拷贝,mv nginx.conf nginx.conf.bak

vim nginx.conf //写入如下内容(参考https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D15Z/nginx.conf)

检查一下有没有出错:/usr/local/nginx/sbin/nginx -t

启动:/etc/init.d/nginx  start

netstat -lntp |grep 80

测试php解析

vi /usr/local/nginx/html/1.php //加入如下内容

<?php

echo "test php scripts.";

?>

curl localhost/1.php

Nginx默认虚拟主机

进到:/usr/local/nginx/conf

编辑vim /usr/local/nginx/conf/nginx.conf //把最后一段server删除,增加

include vhost/*.conf;

创建conf子目录:mkdir /usr/local/nginx/conf/vhost

进到vhost下:cd vhost/

在创建一个比如aaa.com.conf,编辑

vim aaa.com.conf //加入如下内容

server

{

listen 80 default_server;  // 有这个标记的就是默认虚拟主机

server_name aaa.com;

index index.html index.htm index.php;

root /data/wwwroot/default;

}

创建目录(因为配置文件里有这个目录):

mkdir /data/wwwroot/default

然后进到这个目录下:cd /data/wwwroot/default/

定义一个东西:vim index.html 在里边随便写一句:this is the default site.

或者用这种定向的方式写入:echo “This is a default site.”>/data/wwwroot/default/index.html

写完检查一下有没有错误/usr/local/nginx/sbin/nginx -t

从新加载(加上选项-s reload):/usr/local/nginx/sbin/nginx -s reload

测试一下看看是否显示刚才定义的那句话:curl localhost

测试一下指定域名:curl -x127.0.0.1:80 123.com

Nginx用户认证

在这个目录下做操作:

cd /usr/local/nginx/conf/vhost

编辑配置文件:创建一个虚拟主机

vim /usr/local/nginx/conf/vhost/test.com.conf//写入如下内容

server

{

listen 80;

server_name test.com;

index index.html index.htm index.php;

root /data/wwwroot/test.com;

location  /

{

auth_basic              "Auth";

auth_basic_user_file   /usr/local/nginx/conf/htpasswd;

}

}

下面是生成密码文件:

如果你上边安装过Apache可以直接用这个命令:

-c是生成的意思,你要设置第二个就不用加了,要不他就会重置

/usr/local/apache2.4/bin/htpasswd -c /usr/local/nginx/conf/htpasswd awei

没有就安装一个yum install -y httpd 再用上边的命令

测试一下/usr/local/nginx/sbin/nginx -t

重新加载:/usr/local/nginx/sbin/nginx -s reload

curl -x127.0.0.1:80 test.com 状态码为401说明需要认证

我们需要创建index.html目录:

mkdir /data/wwwroot/test.com

echo “test.com”>/data/wwwroot/test.com/index.html

指定用户,用-u用户加密码:

curl -uawei:123456789 -x127.0.0.1:80 test.com -I 访问状态码变为200

编辑windows的hosts文件,然后在浏览器中访问test.com会有输入用户、密码的弹窗

针对指定目录的用户认证

location  /admin/  在后边加目录名字就行,这样的话只有访问他的时候才需要验证

{

auth_basic              "Auth";

auth_basic_user_file   /usr/local/nginx/conf/htpasswd;

}

可以测试一下:创建一个测试页面,用户跟密码根据自己的改

\

Nginx域名重定向

更改test.com.conf

在这个路径下:cd /usr/local/nginx/conf/vhost

server

{

listen 80;

server_name test.com test1.com test2.com;  在后边加上域名

index index.html index.htm index.php;

root /data/wwwroot/test.com;

if ($host != ‘test.com‘ ) {//域名跳转,如果不是test.com就让他调转过来

rewrite  ^/(.*)$  http://test.com/$1  permanent;(301)

}

}

测试配置文件:/usr/local/nginx/sbin/nginx -t

重新加载:/usr/local/nginx/sbin/nginx -s reload

测试一下是否为301:curl -x127.0.0.1:80 test2.com/index.html -I

server_name后面支持写多个域名,这里要和httpd的做一个对比

 permanent为永久重定向,状态码为301,如果写redirect则为302

Nginx访问日志

日志格式

打开主配置文件:vim /usr/local/nginx/conf/nginx.conf //搜索log_format 这一段就是用来定义日志格式的

combined_realip:这是日志个是的名字,可以随便定义,这里写成什么,后边引用他时就写成啥

nginx配置有个特点,他会认为什么时候有分号;,才会结束

除了在主配置文件nginx.conf里定义日志格式外,还需要在虚拟主机配置文件中:

vi /usr/local/nginx/conf/vhost/test.com.conf

增加:access_log /tmp/test.com.log combined_reali;意思是把日志放到一个目录下

这里的combined_realip就是在nginx.conf中定义的日志格式名字

-t && -s reload

访问一下:curl -x127.0.0.1:80 test2.com/index.html -I

查看一下日志:cat /tmp/test.com.log

Nginx日志切割

自定义shell 脚本

vim /usr/local/sbin/nginx_log_rotate.sh//写入如下内容

#! /bin/bash

## 假设nginx的日志存放路径为/data/logs/

d=`date -d "-1 day" +%Y%m%d`

logdir="/data/logs"

nginx_pid="/usr/local/nginx/logs/nginx.pid"

cd $logdir

for log in `ls *.log`

do

mv $log $log-$d

done

/bin/kill -HUP `cat $nginx_pid`

任务计划

crontab -e 把下边内容写进去

0 0 * * * /bin/bash /usr/local/sbin/nginx_log_rotate.sh

静态日志不记录日志和过期时间

配置如下

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$

{

expires      7d;

access_log off;

}

location ~ .*\.(js|css)$

{

expires      12h;

access_log off;

}

模拟一下

先到这个目录下:cd /data/wwwroot/test.com/

编辑:vi 1.gif 随便写点东西

编辑:vi 2.js 随便写点东西

测试一下:

curl -x127.0.0.1:80 test.com/1.gif

curl -x127.0.0.1:80 test.com/2.js

curl -x127.0.0.1:80 test.com/index.html

访问完查看一下日志:

cat /tmp/test.com.log  你会发现他只记录了最后一条

Nginx防盗链

配置如下,可以和上面的配置结合起来

location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|xls)$

{

expires 7d;

valid_referers none blocked server_names  *.test.com ; 定义白名单如果不匹配直接403

if ($invalid_referer) {

return 403;

}

access_log off;

}

测试:

curl -e "http://baidu.com/1.txt" -x127.0.0.1:80 -I test.com/1.gif 403

curl -e "http://test.com/1.txt" -x127.0.0.1:80 -I test.com/1.gif 200

Nginx访问控制

需求:访问/admin/目录的请求,只允许某几个IP访问,配置如下:

location /admin/

{

allow 192.168.133.1;

allow 127.0.0.1;

deny all;

}

mkdir /data/wwwroot/test.com/admin/

echo “test,test”>/data/wwwroot/test.com/admin/1.html

-t && -s reload

curl -x127.0.0.1:80 test.com/admin/1.html -I

curl -x192.168.133.130:80 test.com/admin/1.html -I

可以匹配正则

location ~ .*(abc|image)/.*\.php$

{

deny all;

}

根据user_agent限制

if ($http_user_agent ~ ‘Spider/3.0|YoudaoBot|Tomato‘)

{

return 403;

}

deny all和return 403效果一样

Nginx解析PHP的配置

配置如下:

location ~ \.php$

{

include fastcgi_params;

fastcgi_pass unix:/tmp/php-fcgi.sock;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME /data/wwwroot/test.com$fastcgi_script_name;

}

fastcgi_pass 用来指定php-fpm监听的地址或者socket

编辑完配置文件先不要重新加载,等测试中在加载,直接测试

测试:

vi /data/wwwroot/test.com/3.php 把下面内容写进去:

<?php

phpinfo();

然后curl一下:curl -x127.0.0.1:80 test.com/3.php 这时他是解析不了的

然后重新加载一下配置文件:

/usr/local/nginx/sbin/nginx -s reload

在解析:

curl -x127.0.0.1:80 test.com/3.php

Nginx代理

cd /usr/local/nginx/conf/vhost

vim proxy.conf //加入如下内容

server

{

listen 80;

server_name ask.apelearn.com;定义域名

location /

{

proxy_pass      http://121.201.9.155/;远程服务端web服务器的ip。

proxy_set_header Host   $host;

proxy_set_header X-Real-IP      $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

}

验证一下:curl ask.apelearn.com/robots.txt

本机也能访问:curl -x127.0.0.1:80 ask.apelearn.com/robots.txt

Nginx负载均衡

vim /usr/local/nginx/conf/vhost/load.conf // 写入如下内容

upstream qq_com 这个名字代表着下边的两个IP

{

ip_hash;

server 61.135.157.156:80;

server 125.39.240.113:80;

}

server

{

listen 80;

server_name www.qq.com;

location /

{

proxy_pass      http://qq_com;

proxy_set_header Host   $host;

proxy_set_header X-Real-IP      $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

}

upstream来指定多个web server

SSL工作原理

1.浏览器发送一个https的请求给服务器;

2.服务器要有一套数字证书,可以自己制作(后面的操作就是阿铭自己制作的证书),也可以向组织申请,区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出>提示页面,这套证书其实就是一对公钥和私钥;

3.服务器会把公钥传输给客户端;

4.客户端(浏览器)收到公钥后,会验证其是否合法有效,无效会有警告提醒,有效则会生成一串随机数,并用收到的公钥加密;

5.客户端把加密后的随机字符串传输给服务器;

6.服务器收到加密随机字符串后,先用私钥解密(公钥加密,私钥解密),获取到这一串随机数后,再用这串随机字符串加密传输的数据(该加密为对称加密,所谓对称加密,就是将数据和私钥也就是这个随机字符串>通过某种算法混合在一起,这样除非知道私钥,否则无法获取数据内容);

7.服务器把加密后的数据传输给客户端;

8.客户端收到数据后,再用自己的私钥也就是那个随机字符串解密;

生成SSL密钥对

先进入到这个目录下:cd /usr/local/nginx/conf

生成一个私钥:openssl genrsa -des3 -out tmp.key 2048//key文件为私钥

openssl rsa -in tmp.key -out aminglinux.key //转换key,取消密码

删掉没用的这个:rm -f tmp.key

openssl req -new -key aminglinux.key -out aminglinux.csr//生成证书请求文件,需要拿这个文件和私钥一起生产公钥文件

生成公钥文件:openssl x509 -req -days 365 -in aminglinux.csr -signkey aminglinux.key -out aminglinux.crt

这里的aminglinux.crt为公钥

Nginx配置SSL

vim /usr/local/nginx/conf/vhost/ssl.conf//加入如下内容

server

{

listen 443;

server_name aming.com;

index index.html index.php;

root /data/wwwroot/aming.com;

ssl on;

ssl_certificate aminglinux.crt;

ssl_certificate_key aminglinux.key;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

}

创建一个路径:mkdir /data/wwwroot/aming.com 因为跑配置文件有这个路径

-t && -s reload //若报错unknown directive “ssl” ,需要重新编译nginx,加上--with-http_ssl_module

方法:

进到这个目录下,cd /usr/local/src/nginx-1.12.1/

./configgure --help |grep -i ssl

添加一条正则表达式:

./configure --prefix=/usr/local/nginx --with-http_ssl_module

make && make install

用命令查看:/usr/local/nginx/sbin/nginx -V 会多一个参数

检查错误:/usr/local/nginx/sbin/nginx -t

重启一下:/etc/init.d/nginx restart

查一下他的监听端口:netstat -lntp 会发现多了一个443端口

创建一个测试文件

把这句话写入到配置文件去:

echo This is ssl.>/data/wwwroot/aming.com/index.html

要想直接访问IP就编辑hosts:

vi /etc/hosts 增加127.0.0.1 aming.com

curl https://aming.com/

再从你的电脑hosts里添加上你的虚拟机ip:192.168.65.135 aming

用电脑连网输入:https//aming.com 如果不能上查看防火墙

iptables -nvL

iptables -F

php-fpm的pool

vim /usr/local/php/etc/php-fpm.conf//在[global]部分增加

include = etc/php-fpm.d/*.conf

mkdir /usr/local/php/etc/php-fpm.d/

cd /usr/local/php/etc/php-fpm.d/

vim www.conf //内容如下

[www]

listen = /tmp/www.sock

listen.mode=666

user = php-fpm

group = php-fpm

pm = dynamic

pm.max_children = 50

pm.start_servers = 20

pm.min_spare_servers = 5

pm.max_spare_servers = 35

pm.max_requests = 500

rlimit_files = 1024

继续编辑配置文件

vim aming.conf //内容如下

[aming]

listen = /tmp/aming.sock

listen.mode=666

user = php-fpm

group = php-fpm

pm = dynamic

pm.max_children = 50

pm.start_servers = 20

pm.min_spare_servers = 5

pm.max_spare_servers = 35

pm.max_requests = 500

rlimit_files = 1024

检查:/usr/local/php/sbin/php-fpm –t

重启:/etc/init.d/php-fpm restart

php-fpm慢执行日志

vim /usr/local/php-fpm/etc/php-fpm.d/www.conf//加入如下内容

request_slowlog_timeout = 1

slowlog = /usr/local/php-fpm/var/log/www-slow.log

配置nginx的虚拟主机test.com.conf,把unix:/tmp/php-fcgi.sock改为unix:/tmp/www.sock

重新加载nginx服务

vim /data/wwwroot/test.com/sleep.php//写入如下内容

<?php echo “test slow log”;sleep(2);echo “done”;?>

curl -x127.0.0.1:80 test.com/sleep.php

cat /usr/local/php-fpm/var/log/www-slow.log

php-fpm定义open_basedir

vim /usr/local/php-fpm/etc/php-fpm.d/aming.conf//加入如下内容

php_admin_value[open_basedir]=/data/wwwroot/aming.com:/tmp/

创建测试php脚本,进行测试

再次更改aming.conf,修改路径,再次测试

配置错误日志

再次测试

查看错误日志

php-fpm进程管理

pm = dynamic  //动态进程管理,也可以是static,如果改成static下边的就不会生效了

pm.max_children = 50 //最大子进程数,ps aux可以查看

pm.start_servers = 20 //启动服务时会启动的进程数

pm.min_spare_servers = 5 //定义在空闲时段,子进程数的最少数量,如果达到这个数值时,php-fpm服务会自动派生新的子进程。

pm.max_spare_servers = 35 //定义在空闲时段,子进程数的最大值,如果高于这个数值就开始清理空闲的子进程。

pm.max_requests = 500  //定义一个子进程最多处理的请求数,也就是说在一个php-fpm的子进程最多可以处理这么多请求,当达到这个数值时,它会自动退出。

时间: 2024-10-15 00:08:32

笔记11(LNMP)的相关文章

《C++ Primer Plus》学习笔记11

<C++ Primer Plus>学习笔记11 第17章 输入.输出和文件 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

[Aaronyang] 写给自己的WPF4.5 笔记11[自定义控件-AyImageButton篇 1/4]

我的文章一定要对读者负责-否则不是好文章  ----       www.ayjs.net  aaronyang技术分享 文章导航: 介绍vs2013 WPF开发,属性代码相关技巧 实战AyImageButton 1.0细用慢讲,学会用户控件,依赖属性,属性回调事件 诞生AyImageButton 1.1 支持 控件简单写法,支持自定义AyImageButton写法,提供详细的API 效果图: AyImageButton记录 源码下载:http://pan.baidu.com/s/1eQlHly

sqlite学习笔记11:C语言中使用sqlite之删除记录

最后一节,这里记录下如何删除数据. 前面所有的代码都继承在这里了,在Ubuntu14.04和Mac10.9上亲测通过. #include <stdio.h> #include <stdlib.h> #include "sqlite/sqlite3.h" #define DB_NANE "sqlite/test.db" sqlite3 *db = NULL; char* sql = NULL; char *zErrMsg = NULL; con

lua学习笔记11:lua中的小技巧

lua中的小技巧,即基础lua语言本身的特种,进行一个些简化的操作 一 巧用or x = x or v 等价于: if not x then x = v end 如果x为nil或false,就给他赋值为 二 三元运算符实现 a and b or c 类似C语言: a ? b : c and 的运算由优先级高于or lua学习笔记11:lua中的小技巧,布布扣,bubuko.com

mybatis学习笔记(11)-多对多查询

mybatis学习笔记(11)-多对多查询 mybatis学习笔记11-多对多查询 示例 多对多查询总结 resultMap总结 本文实现多对多查询,查询用户及用户购买商品信息. 示例 查询主表是:用户表 关联表:由于用户和商品没有直接关联,通过订单和订单明细进行关联,所以关联表:orders.orderdetail.items sql SELECT orders.*, user.username, user.sex, user.address, orderdetail.id orderdeta

mybatis学习笔记(11)-一对多查询

mybatis学习笔记(11)-一对多查询 mybatis学习笔记11-一对多查询 示例 小结 本文实现一对多查询,查询订单及订单明细的信息 示例 sql 确定主查询表:订单表 确定关联查询表:订单明细表 在一对一查询基础上添加订单明细表关联即可. SELECT orders.*, user.username, user.sex, user.address, orderdetail.id orderdetail_id, orderdetail.items_id, orderdetail.item

学习笔记11

目前正在专修CSS这一块,现在对内联元素和块元素进行深入的学习一下: 内联元素(inline element)一般都是基于语义级(semantic)的基本元素.内联元素只能容纳文本或者其他内联元素,常见内联元素"a". 块元素(block element)和内联元素(inline element)都是html规范中的概念.块元素和内联元素的基本差异是块元素一般都从新行开始.而当加入了css控制以后,块元素和内联元素的这种属性差异就不成为差异 了.比如,我们完全可以把内联元素cite加上

shell 脚本实战笔记(11)--Mysql在linux下的安装和简单运维

前言: linux中安装mysql以及配置的管理, 基础的运维和管理还是需要会一些的. 这边作下笔记, 以求天天向上(^_^). 安装流程:*). 安装mysql-server1). 借助yum检索相关的mysql rpm包yum search mysqlmysql-server.x86_64 正是我们想要的 2). 安装mysql-serveryum install mysql-server.x86_64 -y默认mysql-client也安装好 3). 启动mysql服务/etc/init.

Swift学习笔记(11)--类与结构体

类与结构是编程人员在代码中会经常用到的代码块.在类与结构中可以像定义常量,变量和函数一样,定义相关的属性和方法以此来实现各种功能. 和其它的编程语言不太相同的是,Swift不需要单独创建接口或者实现文件来使用类或者结构.Swift中的类或者结构可以在单文件中直接定义,一旦定义完成后,就能够被直接其它代码使用. 注意:一个类的实例一般被视作一个对象,但是在Swift中,类与结构更像是一个函数方法,在后续的章节中更多地是讲述类和结构的功能性. 1.类和结构的异同 类和结构有一些相似的地方,它们都可以

springmvc学习笔记(11)-springmvc注解开发之简单参数绑定

springmvc学习笔记(11)-springmvc注解开发之简单参数绑定 springmvc学习笔记11-springmvc注解开发之简单参数绑定 spring参数绑定过程 默认支持的类型 简单类型 pojo绑定 自定义参数绑定实现日期类型绑定 springmvc和struts2的区别 本文主要介绍注解开发的简单参数绑定,包括简单类型.简单pojo以及自定义绑定实现类型转换 spring参数绑定过程 从客户端请求key/value数据,经过参数绑定,将key/value数据绑定到contro