当前位置:首页 » Linux技术知识

项目实战1—LNMP的搭建、nginx反向代理和缓存等的实现

2017-11-12 19:01 本站整理 浏览(6)

实战一:搭建lnmp及类小米等商业网站的实现

环境:关闭防火墙,selinux

1、安装包,开启服务

yum -y install nginx mariadb-server php-fpm php-mysql

systemctl start nginx

systemctl start mariadb

systemctl start php-fpm

2、修改nginx的配置文件

(1)cp /etc/nginx/nginx.conf.default /etc/nginx/nginx.conf 有个模板例子覆盖了配置文件

vim /etc/nginx/nginx.conf 修改下面几类

① user nobody; 使用用户
error_log /var/log/nginx/error.log info; 错误日志

② events {
① user nobody; 使用用户
  error_log /var/log/nginx/error.log info; 错误日志

② events {
  worker_connections 65535;
}

③ tcp_nopush on; tcp优化
tcp_nodelay on;
gzip on;

④ server {
listen 80;
server_name xiaomi.along.com; 根据自己顺便写
root /data/web; 主站点的目录根
  location / {
    index index.php index.html index.htm;
  }

⑤ location ~ \.php$ { 开启.php,配置文件有例子,只需去掉注释,修改一行即可
  fastcgi_pass 127.0.0.1:9000;
  fastcgi_index index.php;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  include fastcgi_params;
}

(2)修改完,可以nginx -t 查看

systemctl restart nginx 重启服务,发现有warn

(3)ulimit -n 查看linux系统里打开文件描述符的最大值,一般缺省值是1024,对一台繁忙的服务器来说,这个值偏小,所以有必要重新设置linux系统里打开文件描述符的最大值

ulimit -n 65535 修改内核参数

3、修改php-fpm的配置文件

① vim /etc/php.ini 改两行

date.timezone = Asia/Shanghai 时区

short_open_tag = On 允许短标签

vim /etc/php-fpm.d/www.conf 改两行

user = nobody

group = nobody

systemctl restart php-fpm

4、运行mysql ,创建一会网页需要的库

create database xiaomi;

5、把事先找好的小米网站传进来 rz

小米网站的源码资源我已经上传到网盘了http://pan.baidu.com/s/1kUUFp6B ,需要的私密我

mkdir /data/web -p 创建一个目录专门放小米的网页配置

unzip -d /data/web/ xiaomi.zip 解压到目录

cd /data/web/

chown -R nobody.nobody * 为了安全,递归把所有文件的所属人和所属组改为权限有限的nobody

6、网页登录

① 用户:admin

密码:123456

② 参数设置:就是连接上自己的数据库

也可以在命令行连上自己的数据库:

vim /data/web/data/config.php

③ 把数据写到数据库中,恢复数据

7、实验成功,登录查看

后台登录,可以自己随便修改

http://192.168.30.107/admin

8、ab 可以压力测试

ab -c 100 -n 1000  http://192.168.30.107/

实验二:实现ssl 加密

(1)一个物理服务器设置一个https

1、创建存放证书的目录

mkdir /etc/nginx/ssl

2、自签名证书

cd /etc/pki/tls/certs/

make nginx.crt

openssl rsa -in nginx.key -out nginx2.key 因为刚私钥被加密了,为了后边方便,解密

3、把证书和私钥cp 到nginx存放证书目录

cp nginx.crt nginx2.key /etc/nginx/ssl/

cd /etc/nginx/ssl/

mv nginx2.key nginx.key 把名字改回来

4、修改配置文件,加一段server

server {
   listen 443 ssl;
   server_name www.along.com;
   ssl on;
   ssl_certificate /etc/nginx/ssl/nginx.crt;
   ssl_certificate_key /etc/nginx/ssl/nginx.key;
   ssl_session_cache shared:sslcache:20m;
   ssl_session_timeout 10m;
 }

5、测试,网页打开 https://192.168.30.7/

windows 信任证书

(2)因为nginx 强大,可以实现多个虚拟主机基于不同的FQDN 实现ssl加密,httpd不能实现

一个物理服务器设置多个https

1、生成3个证书和私钥

make nginx.crt

make nginx2.crt

make nginx3.crt

2、把证书和私钥cp 到nginx存放证书目录,并解开私钥的加密

cp nginx{1,2,3}* /etc/nginx/ssl/

openssl rsa -in nginx.key -out nginx.key

openssl rsa -in nginx2.key -out nginx2.key

openssl rsa -in nginx3.key -out nginx3.key

3、创建各自对应的访问网页

mkdir /app/website{1,2,3}

echo website1 > /app/website1/index.html

echo website1 > /app/website2/index.html

echo website1 > /app/website3/index.html

4、测试访问,成功

实战三:实现身份验证

1、生成密码账户文件

cd /etc/nginx/conf.d

htpasswd -c -m .htpasswd http1

htpasswd -m .htpasswd http2

2、在配置文件中修改

vim /etc/nginx/nginx.conf 在location段中指向账户密码文件

location /images {

auth_basic "images site"; "提示字"

auth_basic_user_file /etc/nginx/conf.d/.htpasswd;

}

3、网页查看验证 http://172.17.22.22/images/loading.gif

实验四:实现反向代理负载均衡且动静分离

1、环境准备:

机器名称

IP配置

服务角色

备注

nginx

VIP:172.17.11.11

反向代理服务器

开启代理功能

设置监控,调度

rs01

RIP:172.17.22.22

后端服务器

stasic-srv 组

rs02

RIP:172.17.1.7

后端服务器

stasic-srv 组

rs01

RIP:172.17.77.77

后端服务器

defautl-srv 组

rs02

RIP:172.17.252.111

后端服务器

defautl-srv 组

2、下载编译安装tengine

原因:nginx自带的监控模式虽然能用,但是很不易理解;tengine的监控模式易设简单,且是在nginx的二次开发,和nginx差不多

(1)官网下载:http://tengine.taobao.org 还支持中文

解包 tar tengine-2.1.1.tar.gz

cd tengine-2.1.1

(2)下载所依赖的包

yum -y groupinstall "development tools"

yum install openssl-devel -y

yum install pcre-devel -y

(3)编译安装

./configure --prefix=/usr/local/tengine 指定安装后的目录

make && make install

3、设置代理服务器的配置文件

cd /usr/local/tengine/conf

cp nginx.conf /usr/local/tengine/conf/ 若机器上本有nginx,可以把配置文件直接拷过来,没有也可自己设置

vim nginx.conf 全局段和 http段我就不设置了,默认就好

① 定义upstream:后端server 群

upstream lnmp-srv1 {
        server 172.17.22.22:80;
        server 172.17.1.7:80;
        check interval=3000 rise=2 fall=5 timeout=1000 type=http;
        check_http_send "HEAD / HTTP/1.0\r\n\r\n";
        check_http_expect_alive http_2xx http_3xx;
}
upstream lnmp-srv2 {
        server 172.17.77.77:80;
        server 172.17.252.111:80;
        server 172.17.1.7:80;
        check interval=3000 rise=2 fall=5 timeout=1000 type=http;
        check_http_send "HEAD / HTTP/1.0\r\n\r\n";
        check_http_expect_alive http_2xx http_3xx;
}

 

② 在server段的location 段中设置动静分离

server {
   listen 80;
   location /stats { #设置监听页面
   check_status;
 }

    location ~* .jpg|.png|.gif|.jpeg$ {
      proxy_pass http://static-srv;
   }
    location ~* .css|.js|.html|.xml$ {
      proxy_pass http://static-srv;
   }
   location / {
     proxy_pass http://default-srv;
   }
}

4、启动tengine服务

cd /usr/local/tengine/sbin/

./nginx 启动tengine

./nginx -s stop 停止

5、开启后端的web服务

systemctl start nginx

systemctl start php-fpm

systemctl start mariadb

6、测试

(1)测试反向代理是否成功 http://172.17.11.11/ web页面访问成功

(2)测试状态页面 http://172.17.11.11/stats

(3)测试动静分离

把静态页面的后端server组的服务宕机,发现没有静态的东西了

实验五:nginx实现缓存功能

需求分析:为什么需要缓存?

缓存的最根本的目的是为了提高网站性能, 减轻频繁访问数据 , 而给数据库带来的压力 。 合理的缓存 , 还会减轻程序运算时 , 对CPU 带来的压力。在计算机现代结构中, 操作内存中的数据比操作存放在硬盘上的数据是要快N 个数量级的 , 操作简单的文本结构的数据 , 比操作数据库中的数据快N 个数量级 。

例如: 每次用户访问网站, 都必须从数据库读取网站的标题, 每读一次需要15 毫秒的时间, 如果有100 个用户( 先不考虑同一时间访问), 每小时访问10 次, 那么就需要读取数据库1000 次, 需要时间15000 毫秒. 如果把页面直接变成页面缓存,则每次访问就不需要去数据库读取,大大提升了网站性能。

1、环境准备:同上实验,实验结构图如下:

2、设置代理服务器的配置文件

① 先在http段定义缓存

proxy_cache_path /data/cache levels=1:2:2 keys_zone=proxycache:10m inactive=120s max_size=1g

分析:定义一个缓存,路径在/data/cache 下;三级目录,第一级[0-f]随机数字,第二、三级[00-ff]随机数字;定义缓存的名字proxycache,缓存大小10M;存活时间120s;在磁盘占用空间最大1G。

② 再在server段引用缓存

proxy_cache proxycache; # 引用上面定义上的缓存空间,同一缓存空间可以在几个地方使
用
proxy_cache_key $request_uri; #对uri做hash运算
proxy_cache_valid 200 302 301 1h; #200、302、301响应码的响应内容的缓存1小时
proxy_cache_valid any 1m; #其它缓存1分
add_header Along-Cache "$upstream_cache_status form $server_addr"; # 给请求响应增加一个头部信息,表示从服务器上返回的cache

3、测试:访问 http://172.17.11.11/ ,F12调试模式下,看到自己设置的特定头部存在

缓存目录也生成了缓存