模块化设计
(开源软件)继承性
Apache [老 功能多 性能差] 并发量 2-3w
Nginx [快 性能] 5w
Lighttpd
以上均不做JAVA网站
Tomcat
IBM WebSphere
Jboss
做JAVA网站
useradd -s /sbin/nologin nginx(可做可不做)
解包编译
cd nginx-1.8
--prefix=/usr/local/nginx #指定安装位置
./configure --user=nginx[默认安装若干个模块]
./configure --with-模块名称 --with-模块 #安装默认模块之外的模块
./configure --with-http_ssl_module #做加密网站须安装模块
make
make install
默认用户nobody
root启动nginx[nginx普通用户]
useradd 为了安全
nginx-1.8 少模块---->1.9 多模块
[root@Proxy ~]# cd lnmp_soft/
[root@Proxy lnmp_soft]# rm -rf nginx-1.8.0
[root@Proxy lnmp_soft]# tar -xf nginx-1.9.0.tar.gz
[root@Proxy lnmp_soft]# cd nginx-1.9.0/
[root@Proxy nginx-1.8.0]# ./configure --with-http_ssl_module
#配置安装方式
[root@Proxy nginx-1.8.0]# make #根据选择的功能 把源码变成二进制程序
[root@Proxy nginx-1.8.0]# cp objs/nginx /usr/local/nginx/sbin/
#升级一般不使用make install make install 可能会将原有的覆盖 只cp程序即可
[root@Proxy ~]# nginx #启动nginx服务
[root@Proxy ~]# nginx -s stop #停止nginx服务
[root@Proxy ~]# nginx -V #查看信息
1 基于域名的虚拟主机
客户端/etc/hosts #本地域名解析文件
IP 域名
IP 域名
优先级高于DNS
server {
listen 80;
server_name www.b.com;
location / {
root web;
index index.html index.htm;
}
}
#找模版,去注释
#改端口
#改域名
#修改网站的根目录
测试
客户端 修改/etc/hosts
192.168.4.5 www.b.com
firefox http://www.a.com
2 基于端口的虚拟主机
listen 8909
3 基于IP的虚拟主机
实验3 https
http协议是明文[软件]
http+ssl
加密算法
对称加密 #加密和解密是同一把钥匙 [单机加密]
非对称加密 #加密和解密不是同一把钥匙
哈希值 #数据安全 md5sum 加文件
生成秘钥文件
[root@Proxy web]# cd /usr/local/nginx/conf/
[root@Proxy conf]# openssl genrsa > cert.key #生成私钥 解密
[root@Proxy conf]# openssl req -new -x509 -key cert.key > cert.pem
国家CN 省份 城市 公司 部门 主机名 邮箱
#生成证书(公钥) 加密
#除国家必须为CN外 均不限制内容
修改配置 调用秘钥
[root@Proxy conf]# vim /usr/local/nginx/conf/nginx.conf
ssl_certificate cert.pem; #公钥
ssl_certificate_key cert.key; #私钥
[root@Proxy ~]# nginx -s reload
验证
[root@Client ~]# firefox https://www.c.com/
实现负载均衡
健康检查功能(web高可用)
1 部署后台2个web服务器
装包 写入测试页面 起服务 防火墙
2 部署Proxy 调度器
[root@Proxy conf]# cp nginx.conf.default nginx.conf
cp:是否覆盖"nginx.conf"? y
使用原始配置 覆盖nginx.conf 还原nginx的配置 覆盖之前环境
定义集群 #增加吞吐量 增加并发量
[root@Proxy conf]# vim nginx.conf
http {
..
upstream webs {
server 192.168.2.100:80;
server 192.168.2.200:80;
}
..
server {
#在默认的http下面 server 上面 定义一个集群 "webs" 集群名 不做限制
#只是定义 没有使用集群
调用集群
location / {
proxy_pass http://webs;
root html;
index index.html index.htm;
}
在root html;前面添加一句 将访问请求 转发给webs
[root@Proxy conf]# nginx
upstream webs {
ip_hash;
server 192.168.2.100:80 max_fails=1 fail_timeout=20;
server 192.168.2.200:80 weight=2;
}
#weight 权重 默认为1 权重越高 负载的请求量越多
#max_fails 如果链接失败 再尝试n次 诊断为服务器故障
#fail_timeout 诊断为故障服务器之后 一定时间内 不再链接该服务器
#down 服务器故障之后 标记该服务器 直到人为解除 不再链接该服务器
#ip_hash 相同客户端访问相同的服务器 nginx调度器默认的算法是轮询
]# nginx -s reload #在不关闭服务的情况下 重载服务
]# tailf /usr/local/nginx/logs/error.log
#报错日志文件
静态页面 请求一个页面 服务器直接返回一个页面
动态页面 请求一个页面 服务器执行代码 返回一个页面
Nginx 动态web
LNMP
装包 7个包
安装Nginx 源码包
yum装 mariadb mariadb-server mariadb-devel php php-mysql
rpm包 php-fpm #php服务 随时在线解释代码
[root@Proxy conf]# yum -y install mariadb mariadb-server mariadb-devel php php-mysql
[root@Proxy lnmp_soft]# rpm -ivh php-fpm-5.4.16-36.el7_1.x86_64.rpm
起服务
[root@Proxy lnmp_soft]# systemctl restart mariadb
[root@Proxy lnmp_soft]# systemctl restart php-fpm.service
检查监听端口
[root@Proxy lnmp_soft]# netstat -nlpt | grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0: LISTEN 4369/nginx: master
[root@Proxy lnmp_soft]# netstat -nlpt | grep 3306
tcp 0 0 0.0.0.0:3306 0.0.0.0: LISTEN 9427/mysqld
[root@Proxy lnmp_soft]# netstat -nlpt | grep 9000
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 9509/php-fpm: maste
Nginx的动静分离
location #匹配用户的地址栏
#可以写正则表达式 ~/正则/
#其他无匹配时 均匹配/
location ~ .php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
当用户访问php页面时 执行
1 找页面的位置 (test.php)
2 把找到的页面交给9000端口(PHP)
写入php测试页面
[root@Proxy html]# cat test.php
$i=1;
echo $i;
?>
重起Nginx
客户端验证
[root@Client ~]# curl http://192.168.4.5/test.php
如果出现错误 查看日志
tailf /usr/local/nginx/logs/error.log
tailf /var/log/php-fpm/error.log
把地址栏重新改写
原来有a.html 后来删除 不做任何处理 访问结果无页面
缩短地址栏的长度
rewrite 旧域名(支持正则) 新域名 [选项]
1 访问a.html跳转到b.html
location / {
root html;
rewrite /a.html /b.html;
index index.html index.htm;
}
[root@Proxy html]# echo web test b > b.html
验证 firefox http://192.168.4.5/a.html
rewrite /a.html /b.html redirect;
redirect #可选项 访问a时 浏览器的地址栏变成b
验证 firefox http://192.168.4.5/a.html
rewrite /c.html /movie/test/c.html
#缩短地址栏的长度
2 访问192.168.4.5跳转到www.tmooc.cn
server {
listen 80;
server_name localhost;
rewrite ^/ http://www.tmooc.cn;
location / {
root html;
#rewrite 写到location的外面
3 访问192.168.4.5跳转到www.tmooc.cn对应的子目录
server {
listen 80;
server_name localhost;
rewrite ^/(.*) http://www.tmooc.cn/$1;
location / {
root html;
4 根据终端类型 展示不同的页面
#手机展示窄屏页面 电脑展示宽屏页面
#根据不同的浏览器 提供不同的页面
准备两个测试页面
[root@Proxy ~]# cd /usr/local/nginx/html/
[root@Proxy html]# echo "Firefox test web" > test.html
[root@Proxy html]# mkdir curl
[root@Proxy curl]# echo "Curl test web" > curl/test.html
修改配置文件
[root@Proxy nginx]# cd /usr/local/nginx/conf/
[root@Proxy conf]# vim nginx.conf
#写在server内 location外
if ($http_user_agent ~ curl){
rewrite ^/(.) /curl/$1;
}
#*不区分大小写
如果在"Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0"
做正则匹配
验证
[root@Client ~]# Firefox http://192.168.4.5/test.html
Firefox test web
[root@Client ~]# curl http://192.168.4.5/test.html
Curl test web
[root@Client ~]# curl -A firefox http://192.168.4.5/test.html
Firefox test web
浏览器标示 [人--地址栏] user_agent
浏览器 把自己的各种信息都给了服务器
浏览器支持伪装
设置 浏览器UA标示
[root@Client ~]# curl -A "Linux 7 IE 8.0" http://192.168.4.5/test.html
#客户端伪装
[root@Proxy conf]# tailf /usr/local/nginx/logs/access.log
#服务端查看访问日志
192.168.4.100 - - [07/Jan/2018:22:01:27 -0500] "GET /test.html HTTP/1.1" 200 17 "-" "Linux 7 IE 8.0"
语法格式
rewrite 旧地址 新地址 [选项];
旧地址支持正则
选项可加可不加
选项
last #不再读其他rewrite
break #不再读其他语句 包括rewrite 以及location
redrict #访问a地址栏自动变成b(临时重定向)
permanent #让地址栏变化 访问a 地址栏自动变成b(永久重定向)
显示版本号 不安全 漏洞
]# curl -I http://192.168.4.5/test.html
HTTP/1.1 200 OK
Server: nginx/1.8.0 #显示具体版本号
Date: Mon, 08 Jan 2018 03:47:48 GMT
Content-Type: text/html
Content-Length: 14
Last-Modified: Mon, 08 Jan 2018 02:20:07 GMT
Connection: keep-alive
ETag: "5a52d557-e"
Accept-Ranges: bytes
关闭默认版本号的显示
[root@Proxy conf]# vim nginx.conf
http {
include mime.types;
default_type application/octet-stream;
server_tokens off; #添加
验证
[root@Client ~]# curl -I http://192.168.4.5/test.html
HTTP/1.1 200 OK
Server: nginx
Date: Mon, 08 Jan 2018 03:51:06 GMT
Content-Type: text/html
Content-Length: 14
Last-Modified: Mon, 08 Jan 2018 02:20:07 GMT
Connection: keep-alive
ETag: "5a52d557-e"
Accept-Ranges: bytes
并发量
包 httpd-tools
ab -c 500 -n 500
[root@Client ~]# ab -c 500 -n 500 http://192.168.4.5/
[root@Client ~]# ab -c 1025 -n 1025 http://192.168.4.5/
Nginx配置文件
[root@Proxy conf]# vim nginx.conf
worker_processes 1;
events {
worker_connections 65535; #每一个worker的并发量
}
#进程数要与cpu的内核数量一致
#并发量 等于进程数乘以每一个worker的并发量
Linux系统内核(文件 进程 用户数量)
[root@Proxy conf]# ulimit -a
[root@Proxy conf]# ulimit -Hn 100000 #-H硬限制(用户不可修改) n(最大文件数量)
[root@Proxy conf]# ulimit -Sn 100000 #-S软限制(用户可以修改) n(最大文件数量)
[root@Proxy conf]# ulimit -a
#并发量高的服务 以上两值均需修改
#当前立刻有效 重启计算机后无效
vim /etc/security/limits.conf
#修改配置文件后 永久生效
* soft nofile 100000
* hard nofile 100000
#默认值是1024
客户端访问头部信息过长
使用脚本测试长头部请求是否能获得响应
[root@Proxy lnmp_soft]# cat buffer.sh
#!/bin/bash
URL=http://192.168.4.5/index.html?
for i in {1..5000}
do
URL=${URL}v$i=$i
done
curl $URL
[root@Proxy ~]# vim /usr/local/nginx/conf/nginx.conf
client_header_buffer_size 1k; #默认请求包头信息的缓存
large_client_header_buffers 4 4k; #大请求包头部信息的缓存个数与容量
Nginx压缩 速度 流量
[root@Proxy ~]# vim /usr/local/nginx/conf/nginx.conf
gzip on; #开启压缩功能 所有浏览器都支持gzip解压
gzip_min_length 1000; #小文件不压缩 至少1000个字节的文件才压缩
gzip_comp_level 4; #压缩比率(1-9)
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
#对什么格式的文件进行压缩
#mp4 mp3 jpg 不进行压缩 因为已经是压缩格式了 多媒体文件一般是压缩格式
#一般对文档进行压缩 doc html css php pdf xls
#需要压缩什么格式的文件 参考 /usr/local/nginx/conf/mime.types 文件
application/msword doc;
让用户的浏览器 缓存数据
缓存不会变化的数据
仅对多媒体文件要求用户缓存30天
配置文件
vim /usr/local/nginx/conf/nginx.conf
server {
listen 80
server_name localhost;
location / {
root html;
}
location ~.(jpg|png|gif)${
expires 30d;
}
拷贝图片
[root@Proxy html]# mv dottexture_navy_2560x1440.jpg abc.jpg
验证
Firefox http://192.168.4.5/abc.jpg
Firefox about:cache
http://192.168.4.5/abc.jpg 659666 bytes 2 2018-01-08 04:05:06 2018-02-07 04:05:06
自定义页面报错
200 一切正常
300 页面被重定向
400 页面异常(用户端错误)
500 服务端错误(服务端错误)
[root@Proxy conf]# vim nginx.conf
charset utf-8;
error_page 404 /404.html;
转载于:https://blog.51cto.com/2168836/2103404