一、Nginx介绍

Nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务。

Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。

其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,

中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

Nginx是一款由俄罗斯的程序设计师所开发高性能的Web和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器

轻量级的web服务器

延伸版本tengine(淘宝)、openresrt(章亦春)等

http://nginx.org官网

http://www.nginx.cn/doc/index.html中文文档

Nginx管理

Nginx优化

Nginx负载均衡

声明

Nginx安装

官网源码包--必须从官网下载

配置:
1)检查环境 是否 满足安装条件 依赖解决
2)指定安装方式 配置文件 命令文件 各种文件放哪里 开启模块功能[内置模块 三方模块]
3)指定软件安装在哪里

视频是在在虚拟机上进行项目部署

下载并放在/usr/src目录下:

wget http://nginx.org/download/nginx-1.15.5.tar.gz -P /usr/src

cd /usr/src
解压 tar xf nginx-1.15.5.tar.gz
cd nginx-1.15.5
安装依赖包:
yum -y install gcc pcre-devel zlib zlib -devel 把所有软件安装到直到目录下:./configure --prefix=/usr/local/nginx
把源码进行编译生成可执行程序:make
安装:make install
启动nginx:
1 cd /usr/local/nginx/
2 /usr/local/nginx/sbin/nginx
查看端口是否被占用:
1、lsof -i:80
2、netstat -ntpl

虚拟机安装流程

-------

安装模块的命令:yum -y install lsof

验证Nginx是否启动:

1、服务器公网地址访问:

2、文本

先安装 sudo yum -y install elinks 才能执行

elinks http://120.79.2.67 --dump

-------

nginx配置文件详解

变量文件

#启动子进程程序默认用户
#user nobody;
#一个主进程和多个工作进程。工作进程是单进程的,且不需要特殊授权即可运行;这里定义的是工作进程数量
worker_processes 1; #全局错误日志的位置及日志格式
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info; #pid logs/nginx.pid; events {
#每个工作进程最大的并发数
worker_connections 1024;
} #http服务器设置
http {
#设定mime类型,类型由mime.type文件定义
include mime.types; #
default_type application/octet-stream; #日志格式
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#$remote_addr与$http_x_forwarded_for用以记录客户端的ip地址;
#$remote_user:用来记录客户端用户名称;
#$time_local: 用来记录访问时间与时区;
#$request: 用来记录请求的url与http协议;
#$status: 用来记录请求状态;成功是200,
#$body_bytes_sent :记录发送给客户端文件主体内容大小;
#$http_referer:用来记录从那个页面链接访问过来的;
#$http_user_agent:记录客户浏览器的相关信息; #全局访问日志路径
#access_log logs/access.log main;
#sendfile指令指定 nginx 是否调用sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为on。如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络IO处理速度,降低系统uptime。
sendfile on; #此选项允许或禁止使用socke的TCP_CORK的选项,此选项仅在使用sendfile的时候使用
#tcp_nopush on; #长连接超时时间
#keepalive_timeout 0;
keepalive_timeout 65; #开启压缩
#gzip on; #配置虚拟主机
server {
#虚拟主机使用的端口
listen 80;
#虚拟主机域名
server_name localhost; #虚拟主机支持的字符集
#charset koi8-r; #虚拟主机的访问日志路径
#access_log logs/host.access.log main; #定义web根路径
location / {
#根目录路径
root html;
#索引页
index index.html index.htm;
} #error_page 404 /404.html; # redirect server error pages to the static page /50x.html
# #根据错误码 返回对应的页面
error_page 500 502 503 504 /50x.html; #定义页面路径
location = /50x.html {
root html;
} #定义反向代理服务器 数据服务器是lamp模型
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#} #定义PHP为本机服务的模型
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#} # deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#拒绝apache DR目录及子目录下的.htaccess文件访问
#location ~ /\.ht {
# deny all;
#}
} # another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias; # location / {
# root html;
# index index.html index.htm;
# }
#} #https的配置方案
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost; # ssl_certificate cert.pem;
# ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on; # location / {
# root html;
# index index.html index.htm;
# }
#} }

nginx配置文件

查看配置文件命令:

vim ./conf/nginx.conf

进入配置文件
cd /usr/local/nginx/
cd ./conf
先敲一些就可以进行编译
在配置文件下查看进程数:
cat /proc/cpuinfo |grep "flags"|wc -l

再末尾输入:q重新回到命令行

Nginx默认网址

Nginx虚拟主机

虚拟主机的介绍:

一个web服务器器软件默认情况下只能发布一个web,         因为一个web分享出去需要三个条件(IP、Port(端口)、Domain name(域名))
一个web服务器器软件如何发布多个web呢? 虚拟主机:就是把⼀一台物理理服务器器划分成多个“虚拟”的服务器器,每一个虚拟主机都可以有独立的域名和独立的目录

目的是让一个web服务器发布多个网站

基于IP的虚拟主机

server {
listen 192.168.10.42:80;
location / {
root html/abc;
index index.html index.htm index.php;
}
}
server {
listen 192.168.10.52:80;
location / {
root html/cbd;
index index.html index.htm;
}
}

基于端口的

server {
listen 80;
#server_name www.abc.com;
location / {
root html/abc;
index index.html index.htm index.php;
}
}
server {
listen 8080;
#server_name www.abc.com;
location / {
root html/cbd;
index index.html index.htm;
}
}

同一个ip下的不同端口

基于域名的

server {
listen 80;
server_name www.abc.com;
location / {
root html/abc;
index index.html index.htm index.php;
}
}
server {
listen 80;
server_name www.cbd.com;
location / {
root html/cbd;
index index.html index.htm;
}
}

小微企业 ------买网站空间

不用买服务器就可以托管网站

Ngnix的反向代理

反向代理介绍:

代理服务器,客户机在发送请求时,不会直接发送给目的主机,而是先发送给代理服务器,代理服务接受客户机请求之后,
再向主机发出,并接收目的主机返回的数据,存放在代理理服务器器的硬盘中,再发送给客户机。

买车人   4s店   厂家

 堡垒机场景
• 内网服务器器发布场景
• 缓存场景

反向代理原理

• 1) 客户端通过浏览器器 发起请求 代理理服务器器
• 2)代理理服务器器 接受请求
• 3) 代理理服务器器 发起请求 业务服务器器
• 4)业务服务器器 接受请求
• 5)业务服务器器 处理理请求
• 6) 业务服务器器 响应请求 代理理服务器器
• 7)代理理服务器器 响应请求 客户端
• 8)客户端通过浏览器器渲染请求并展示给⽤用户

反向代理实现

location / {
index index.php index.html index.htm; #定义⾸首⻚页索引⽂文件的名称
proxy_pass http://mysvr ;#请求转向mysvr 定义的服务器器列列表
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m; #允许客户端请求的最⼤大单⽂文件字节数
client_body_buffer_size 128k; #缓冲区代理理缓冲⽤用户端请求的最⼤大字节数,
proxy_connect_timeout 90; #nginx跟后端服务器器连接超时时间(代理理连接超时)
proxy_send_timeout 90; #后端服务器器数据回传时间(代理理发送超时)
proxy_read_timeout 90; #连接成功后,后端服务器器响应时间(代理理接收超时)
proxy_buffer_size 4k; #设置代理理服务器器(nginx)保存⽤用户头信息的缓冲区⼤大⼩小
proxy_buffers 4 32k; #proxy_buffers缓冲区,⽹网⻚页平均在32k以下的话,这样设置
proxy_busy_buffers_size 64k; #⾼高负荷下缓冲⼤大⼩小(proxy_buffers*2)
proxy_temp_file_write_size 64k; #设定缓存⽂文件夹⼤大⼩小,⼤大于这个值,将从upstream服务器器传
}

Nginx限速

限速介绍:

• 限速该特性可以限制某个用户在⼀一个给定时间段内能够产生的HTTP请求数。请求可以简单到就是⼀一个对于主⻚页的GET请求或者一个登陆表格的POST请求。
• 限速也可以用于安全目的上,⽐比如暴暴⼒力力密码破解攻击。通过限制进来的请求速率,并且(结合日志)标记出目标URLs来帮助防范DDoS攻击。
一般地说,限流是用在
保护上游应⽤用服务器器不不被在同⼀一时刻的⼤大量量⽤用户请求湮没。

应用场景

• DDOS防御
• 下载场景保护IO

限速原理

算法思想是:
水(请求)从上方倒入水桶,从水桶下方流出(被处理理);
来不不及流出的水存在水桶中(缓冲),以固定速率流出;
水桶满后水溢出(丢弃)。
这个算法的核心是:缓存请求、匀速处理、多余的请求直接丢弃。

实现方式

Nginx官方版本限制IP的连接和并发分别有两个模块:
limit_req_zone 用来限制单位时间内的请求数,即速率限制。
limit_req_conn 用来限制同一时间连接数,即并发限制。

模式使用方法

• limit_req_zone 参数配置
• Syntax: limit_req zone=name [burst=number] [nodelay];
• Default: —
• Context: http, server, location

Nginx URL重写

•rewrite模块(ngx_http_rewrite_module)
• Rewrite功功能是Nginx服务器器提供的⼀一个重要功能。几乎是所有的web产品必备技能,⽤用于实现URL重写。URL重写是非常有用的功能,比如它可以在
我们在改变⽹网站结构后,不不需要客户端修改原来的书签,也不不需要其他⽹网站修改对我们⽹网站的友情链接,还可以在一定程度上提高网站的安全性,能够
让我们的网站显得更更专业。

Nginx服务器器Rewrite功能的实现是依赖于PCRE(Perl Compatible Regular Expression。Perl兼容的正则表达式)的支持,所以在编译安装Nginx之前,
需要安装PCRE库。

应用场景

• 域名变更更 (京东)
• 用户跳转 (从某个连接跳到另⼀一个连接)
• 伪静态场景 (便便于CDN缓存动态页面数据)

实现:

1) set    设置变量量
2) if    负责语句句中的判断
3) return  返回返回值或URL
4) break   终止后续的rewrite规则
5) rewrite  重定向URL
set指令 ⾃自定义变量量
Syntax:
set $variable value;
Default:

Context:
server, location, if
• 将http://www.ayitula.com 重写为 http://www.ayitula.com/baism
location / {
set $name baism;
rewrite ^(.*)$ http://www.ayitula.com/$name;
}

Nginx优化

• 标准情况下,软件默认的参数都是对安装软件的硬件标准来设置的,⽬目前我们服务器器的硬件资源远远⼤大于要求的标准,
所以为了了让服务器器性能更更加出众,充分利利⽤用服
务器器的硬件资源,我们一般需要优化APP的并发数来提升服务器器的性能。

Nginx集群

传统web访问模型

单点故障解决方案

• 1) 部署一台备份服务器器,宕机直接切换
• 2) 部署多台服务器器,根据DNS的轮询解析机制去实现⽤用户分发
问题:
1方案:服务器器利利⽤用率低,成本⾼高,切换不不及时,服务器器压力力依然⼤大
2方案: 优势是用户处理理速度得到了了提升,但是当其中一台故障,就会有一部分用户访问不不了了⽹网站

集群概念

• 将多个物理理机器器组成一个逻辑计算机,实现负载均衡和容错
• 计算机集群简称集群,是一种计算机系统, 它通过一组松散集成的计算机软件或硬件连接起来⾼高度紧密地协作完成计算
工作。在某种意义上,他们可以被看作是一台计算机。 (百度解释) • 组成要素
1)VIP:
一个IP地址
2)分发器器:
nginx
3)数据服务器器:
Web服务器器

部署一个基于python语言的web发布环境

1) 一门面向对象的语言
2)拥有丰富的库
3)可移植性
4)免费、开源
5)简单易易学
可做软件开发、人工智能、web开发等等

部署流程:

Cnetos7.5+Nginx+python+Django+uwsgi+mysql
实验部署流程
1)安装Nginx
2)安装python
3)安装mysql
4)部署发布平台
5)测试

1、前面已经安装了Nginx

2、mysql_install(中小型公司)

⼀一个关系型数据库,由瑞典的AB公司开发,后来卖给了了oracle公司,⽬目前分为商业版和社区版
⽬目前有量量⼤大版本 mysql5 和 mysql8
⽬目前建议⼤大家先使⽤用5.7最新版本即可。官⽅方提供了了RPM和源码两种格式
1)安装依赖包
2) 升级cmake⼯工具
3) 升级boost库⽂文件
4) 安装mysql
5) 启动测试
mysql_install
⼀一、前期准备
依赖包
1)cmake命令 2.8以上
https://cmake.org/download/
boost Boost库是⼀一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进
程的开发引擎之⼀一
https://www.boost.org/
mysql
https://dev.mysql.com/downloads/mysql/5.7.html#downloads
⼆二、install
yum -y install ncurses-devel gcc-* bzip2-*
1)cmake install
tar xf cmake-3.6.0-rc1.tar
cd cmake-3.6.0-rc1
./configure
make
make install
2)boost
tar xf boost_1_59_0.tar.bz2
mv boost_1_59_0 /usr/local/boost
3)mysql
useradd -s /sbin/nologin -r mysql
mkdir -pv /usr/local/mysql/data
tar xf mysql...tar.xx
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/
usr/local/mysql/data/ -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock
-DDOWNLOAD_BOOST=0 -DWITH_INNODBBASE_STORAGE_ENGINE=1 -
DENABLE_LOCAL_INFILE=1 -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -
DDEFAULT_COLLATION=utf8_general_ci -DMYSQL_USER=mysql -DWITH_DEBUG=0
-DWITH_EMBEDED_SERVER=0 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/
boost
##解释
-DCMAKE_INSTALL_PREFIX 指定安装路路径
-DMYSQL_DATADIR 指定存放数据⽂文件的⽬目录位置
-DMYSQL_UNIX_ADDR 指定mysql.sock的路路径
-DDOWNLOAD_BOOST=0 不不下载boost库⽂文件
-DWITH_INNODBBASE_STORAGE_ENGINE=1 指定默认存储引擎
-DENABLE_LOCAL_INFILE=1 允许客户端使⽤用local data
local 导⼊入本地数据⽂文件
-DEXTRA_CHARSETS=all ⽀支持所有字符集
-DDEFAULT_CHARSET=utf8 默认字符集是UTF-8
-DDEFAULT_COLLATION=utf8_general_ci 数据库校对规则
-DMYSQL_USER=mysql 管理理⽤用户是mysql
-DWITH_DEBUG=0 关闭debug
-DWITH_EMBEDED_SERVER=0 ⽣生成⼀一个libmysqld.a(.so)的
库,这个库同时集成了了mysql服务与客户端API
-DWITH_BOOST=/usr/local/boost 指定boost的路路径
make
make install
4)安装后操作
cp support-files/mysql.server /etc/init.d/mysql
chmod 755 /etc/init.d/mysql
chown mysql.mysql /usr/local/mysql/ -R
ln -sf /usr/local/mysql/bin/* /usr/bin/
ln -sf /usr/local/mysql/lib/* /usr/lib/
ln -sf /usr/local/mysql/libexec/* /usr/local/libexec
ln -sf /usr/local/mysql/share/man/man1/* /usr/share/man/man1
ln -sf /usr/local/mysql/share/man/man8/* /usr/share/man/man8
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/
usr/local/mysql/ --datadir=/usr/local/mysql/data/
修改配置⽂文件 确保路路径正确
[root@web01 ~]# egrep -v "^#|^$" /etc/my.cnf
[mysqld]
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/mysql.sock
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mysql.log
pid-file=/var/run/mysql.pid
!includedir /etc/my.cnf.d
5)启动mysql
初始化 root@localhost: /q%Zpaoio5i1
6)密码修改

先安装依赖

企业应用--Nginx&web部署的更多相关文章

  1. nginx上部署python web

    nginx上部署python web http://uwsgi-docs.readthedocs.io/en/latest/tutorials/Django_and_nginx.html

  2. 基于flask+gunicorn+nginx来部署web App

    基于flask+gunicorn&&nginx来部署web App WSGI协议 Web框架致力于如何生成HTML代码,而Web服务器用于处理和响应HTTP请求.Web框架和Web服务 ...

  3. 用nginx的反向代理机制解决前端跨域问题在nginx上部署web静态页面

    用nginx的反向代理机制解决前端跨域问题在nginx上部署web静态页面 1.什么是跨域以及产生原因 跨域是指a页面想获取b页面资源,如果a.b页面的协议.域名.端口.子域名不同,或是a页面为ip地 ...

  4. linux篇之Nginx web服务器简单部署

    一.安装部署nginx 1. 部署前先对nginx介绍下别嫌BB: 如果你听说或使用过Apache软件,那么很快就会熟悉Nginx软件,与Apache软件类似, Nginx(“engine x”)是一 ...

  5. Nginx如何部署静态web项目

    环境准备 windows nginx web项目资源包 准备资源包 这里拿layuimini项目举例,从码云上克隆下来直接访问提示需要部署在web服务器当中才能正常浏览演示 准备Nginx 进入解压后 ...

  6. nginx服务部署 说明

    第1章 常用的软件 1.1 常用来提供静态服务的软件   Apache :这是中小型Web服务的主流,Web服务器中的老大哥,   Nginx :大型网站Web服务的主流,曾经Web服务器中的初生牛犊 ...

  7. nginx web服务器应用

    Nginx介绍 Nginx是一个开源的,支持高性能,高并发的www服务和代理服务软件,因具有高并发(特别是静态资源),占用系统资源少等特性,且功能丰富而逐渐流行起来.功能应用上,Nginx不但是一个优 ...

  8. Linux实战教学笔记38:企业级Nginx Web服务优化实战(下)

    四,Nginx站点目录及文件URL访问控制 4.1 根据扩展名限制程序和文件访问 Web2.0时代,绝大多数网站都是以用户为中心多的,例如:bbs,blog,sns产品,这几个产品都有一个共同特点,就 ...

  9. Nginx服务部署

    1 企业常用网站服务 处理静态资源:nginx.apache.Lighttpd处理动态资源:tomcat(java语言编写).php(php语言编写).python(python语言编写)nginx网 ...

随机推荐

  1. Java-Runoob-高级教程-实例-方法:07. Java 实例 – instanceOf 关键字用法

    ylbtech-Java-Runoob-高级教程-实例-方法:07. Java 实例 – instanceOf 关键字用法 1.返回顶部 1. Java 实例 - instanceof 关键字用法   ...

  2. namenode namespaceID与datanode namespaceID 不一致导致datanode无法启动的问题

    在启动hadoop之后,发现如下 datanode何在????? 在重新启动hadoop的时候,发现了问题,如下 这说明datanode启动时出错了 我们跟踪这个问题,进入到log文件夹下,找到had ...

  3. IntelliJ IDEA2017 激活方法 最新的

    今天打开电脑,非常不幸,idea出问题了!!! 大部分人以前应该都是用的以下方法: 1. 到网站 http://idea.lanyus.com/ 获取注册码 2.填入下面的license server ...

  4. es6 class函数的用法,及兼容程度

    //es6中 class的新特性:面向对象的方式 class name{ fram(){ var div=document.getElementById("div"); div.s ...

  5. ubuntu 间简单相互通信

    1.  nc  命令 在一台机器上运行nc -l 来监听本机的2222号端口 另外一台机器就能连接到这台监听的机器上,假设上面那台机器的ip是192. nc 之后就能互相发送字符了 2. iptux通 ...

  6. Jmeter(五)录制功能

    难得休息时间,和开发对完需求便理着Jmeter的知识的相关体系,趁闲暇功夫就记一点,希望这么坚持下去,能有很多关于Jmeter的知识点被总结,被挖掘出来,从而形成自己的一套知识体系..... 嗯,那本 ...

  7. 使用fakeroot模拟root权限执行程序(转)

    Hack #57: 使用fakeroot模拟root权限执行程序 fakeroot是什么 例如Debian在生成package的时候,编译完之后,不能立刻在当前环境执行make install,需要执 ...

  8. MySql 引擎

    存储引擎: 存储引擎就是指表的类型以及表在计算机上的存储方式 它处于MySQL体系架构中Server端底层,是底层物理结构的实现,用于将数据以各种不同的技术方式存储到文件或者内存中,不同的存储引擎具备 ...

  9. IIS 禁止回收

    在IIS中找到这个站点所用的程序池,点击“高级设置...” 在打开的列表中更改以下设置: 回收 ——固定时间间隔(分钟) 改为 0 ——虚拟/专用内存限制(KB) 改为 0 进程模型 ——闲置超时(分 ...

  10. mysql 中 myisam innodb 的区别

    区别: 1. InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事 ...