Web 服务 : Apache nginx tomcat
网页:
静态网页:.html .htm 结尾
动态网页:.jsp .php 结尾
nginx 简述
Apache:2w nginx:5w
单Apache:同时处理客户端的理想值是2w
单nginx:同时处理客户的理想值是5w
nginx和apache有什么区别?
1、nginx开发采用的是epoll模型,是异步非阻塞:apache采用的是select,是同步阻塞
2、nginx支持 负载均衡(既支持4层-传输层 又支持7层的-应用层) 反向代理,配置比apache简单
3、nginx处理静态页面要比aache快,但是动态页面的处理能力就不如apache
Nginx 是一个典型的七层 SLB
LVS 四层的负载均衡
Haproxy 即支持四层有支持七层
nginx在官方维护的有三个版本
Mainine vereion: 开发版
Stabe version 最新稳定版
一、下载Nginx源文件
进入nginx官网下载nginx的稳定版本,
下载:wget http://nginx.org/download/nginx-1.12.0.tar.gz
二、检查安装依赖项
执行下面的命令安装nginx的依赖库:
yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel
三、配置Nginx安装选项
我这里只配置安装到/opt目录下,其它选项可执行./configuration –help查看。
cd nginx安装目录,执行如下命令:
./configure --prefix=/opt/nginx --sbin-path=/usr/bin/nginx
四、编译并安装
make && make install
五、启动、停止、重启
# 1.启动nginx
shell> nginx
# 可通过ps -ef | grep nginx查看nginx是否已启动成功
# 2.停止nginx
shell> nginx -s stop
# 3. 重新启动
shell> nginx -s reload
nginx默认配置启动成功后,会有两个进程,一个主进程(守护进程),一个工作进程。主进程负责管理工作进程,工作进程负责处理用户的http请求。
六、配置nginx开机启动
将/usr/bin/nginx命令添加到/etc/rc.d/rc.local文件中,rc.local文件会在系统启动的时候执行。但CentOS7建议将开机启动服务写成服务描述文件添加到系统服务中,所以rc.local默认没有执行权限,需要给它添加执行权限。
shell> vim /etc/rc.d/rc.local
# 添加如下参数
/usr/bin/nginx
shell> chmod +x /etc/rc.d/rc.local
nginx基础配置
nginx主配置文件 /etc/nginx/nginx.conf 是一个纯文本类型的文件,整个配置文件是以区块的形式组织的。一般每个区块以 一对大括号{}
1.main 位于nginx.conf 配置文件的最高层
2.main 底层可以有EVent 、HTTP层
3.HTTP 层下有允许有多个Server层,用于对不同的网站做不同的配置
4.Server 层也允许有多个Location.
//nginx默认配置语法
user //设置nginx服务的系统使用用户
wofker_processes //工作进程,配置和CPU个数保持一致
error_log //错误日志,后面接入的是路径
pid //nginx服务启动时的pid
//events 事件模块“”“”
events{//事件模块
worker_connections //每个worker 进程支持最大连接数
use //内核模型select,poll,epoll
//非虚拟主机的配置或公共配置定义在http{}段内,server{}段外
http{
.....
//必须使用虚拟主机配置站点,每个虚拟机使用一个server{}段
‘server’{
listen 80;//监听端口,默认80
server_name localhost; //提供服务的域名或主机名
//控制网站访问路径
‘location’/ {
root /usr/share/nginx/html;//存放网站路径
index index.html index.htm;//默认访问首页文件
}
//指定错误代码,统一定义错误面,错误代码重定向到新的Locaitone
error_page 500 502 503 504 /50x.html:
'location'= /50x.html {
root html:
}
}
...
//第二个虚拟主机配置
'server' {
...
}
一个server代表一个虚拟主机
nginx :的安装路径和配置文件
conf nginx的配置文件
html 存放nginx的网页
logs 存放nginx的日志
sbin 存放nginx的命令
nginx 的访问日志路径:cd /usr/local/nginx/logs/
192.168.43.189 - - [22/Feb/2019:22:26:07 +0800] "GET /index.php HTTP/1.1" 200 56787 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"
远程主机IP地址 访问时间 时区 方法 资源 协议 状态码 发送字节 referer
浏览器信息
nginx 命令解释
nginx -s reopen #重启Nginx
nginx -s reload #重新加载Nginx配置文件,然后以优雅的方式重启Nginx
nginx -s stop #强制停止Nginx服务
nginx -s quit #优雅地停止Nginx服务(即处理完所有请求后再停止服务)
nginx -t #检测配置文件是否有语法错误,然后退出
nginx -?,-h #打开帮助信息
nginx -v #显示版本信息并退出
nginx -V #显示版本和配置选项信息,然后退出
nginx -t #检测配置文件是否有语法错误,然后退出
nginx -T #检测配置文件是否有语法错误,转储并退出
nginx -q #在检测配置文件期间屏蔽非错误信息
nginx -p prefix #设置前缀路径(默认是:/usr/share/nginx/)
nginx -c filename #设置配置文件(默认是:/etc/nginx/nginx.conf)
nginx -g directives #设置配置文件外的全局指令
killall nginx #杀死所有nginx进程
Nginx的静态资源
类型 | 种类 |
浏览器端渲染 | HTML、CSS、JS |
图片 | JPEG。GIF、PNG |
视频 | FLV、MP4 |
文件 | TXT 任意下载文件 |
Nginx rewrite地址重写
1.Rewrite基本概述
rewrite 主要实现 url 地址重写, 以及重定向.
Rewrite使⽤场景
1.URL访问跳转: ⽀持开发设计, 页⾯跳转, 兼容性⽀持, 展示效果
2.SEO优化: 依赖于url路径,以便⽀持搜索引擎录⼊
3.维护: 后台维护, 流量转发等
4.安全: 伪静态,
2.Rewrite配置语法
Syntax: rewrite regex replacement [flag];
Default: --
Context: server, location, if
//所有请求转发⾄/pages/maintain.html
rewrite ^(.*)$ /pages/maintain.html break;
正则表达式
正则表达式中特殊字符
\ 转义字符
rewrite index\.php$ /pages/maintain.html break;
() ⽤于匹配括号之间的内容, 通过$1,$2调⽤
if ($http_user_agent ~ Chrome){
rewrite ^/(.*) /chrome/$1 break;
}
正则表达式终端测试⼯具
[root@Nginx ~]# yum install -y pcre-tools
[root@Nginx ~]# pcretest
PCRE version 8.32 2012-11-30
re> /(\d+)\.(\d+)\.(\d+)\.(\d+)/
data> 192.168.56.11
0: 192.168.56.11
1: 192
2: 168
3: 56
4: 11
3.Rewrite标记Flag
对⽐flag中 break 与 last
[root@Nginx ~]# vi /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name localhost;
root /soft/code;
location ~ ^/break{
rewrite ^/break /test/ break;
}
location ~ ^/last{
rewrite ^/last /test/ last;
}
location ~ /test/{
default_type application/json;
return 200 '{"status":"success"}';
}
}
测试 break
测试last
测试访问test
last 与 break 对⽐总结:
last会新建⽴⼀个请求, 请求域名+/test
http://192.168.100.206/last 将访问路径改为 http://192.168.100.206/test
break匹配后不会进⾏匹配, 会查找对应root站点⽬录下包含/test⽬录
http://192.168.100.206/break 当发现网页存放路径下不存在test目录,则报错
对⽐flag中 redirect 与 permanent
[root@nginx ~]# vi /usr/local/nginx/conf/nginx.conf
客户端分别访问:
通过fiddler抓包工具抓取
上边那两个都可以跳转到http://www.alex-daun.top,区别是返回给客户端的状态码不一样
Redirect(临时跳转302) 和permanent(永久跳转301)都可以实现重定向
关闭nginx
[root@localhost ~]# nginx -s stop
测试访问http://192.168.100.206/dgf
关闭nginx服务之后,redirect的页面无法跳转
测试访问http://192.168.100.206/alex
Permanent永久性的重定向页面在关闭nginx之后,还可以继续访问
if ($http_user_agent ~* Chrome){
rewrite ^/nginx http://www.alex-daun.top/ redirect;
}
5.手机和电脑端分离
location / {
if ( $http_user_agent ~ "(Mobile)|(MIDP)|(SAMSUNG)|(iPone)|(ZTE)|(PHILIPS)|(HAIER)|(java)|(curl)|(Android)|(LENOVO)") {
root html/mobile;
}
if ($http_user_agent ~ Firefox) {
root /usr/local/nginx/html/firefox;
}
if ($http_user_agent ~ Chrome) {
root /usr/local/nginx/html/chrome;
}
index index.html index.htm;
}