nginx入门
想必大家都听过大名鼎鼎的nginx了吧 那么有没有纳闷这个到底是什么作用呢?
nginx简介:
Web 网络服务是一种被动访问的服务程序,即只有接收到互联网中其他主机发出的 请求后才会响应,最终用于提供服务程序的 Web 服务器会通过 HTTP(超文本传输协议)或 HTTPS(安全超文本传输协议)把请求的内容传送给用户。
目前能够提供 Web 网络服务的程序有 IIS、Nginx 和 Apache 等。其中,IIS(Internet Information Services,互联网信息服务)是 Windows 系统中默认的 Web 服务程序
说直白点 nginx就是为我们提供了web访问服务的,因为你不能直接进行访问web的,需要一种媒介 nginx就是这种媒介物
nginx的一些作用:
支持高并发,能支持几万并发连接
资源消耗少,在3万并发连接下开启10个nginx线程消耗的内存不到200M
可以做http反向代理和负载均衡
支持异步网络i/o事件模型epoll
Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台。
安装环境:
一. gcc 安装 安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则需要安装: yum install gcc-c++ 二. PCRE pcre-devel 安装 PCRE(Perl Compatible Regular Expressions) 是一个Perl库,包括 perl 兼容的正则表达式库。nginx 的 http 模块使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库,pcre-devel 是使用 pcre 开发的一个二次开发库。nginx也需要此库。命令: yum install -y pcre pcre-devel 三. zlib 安装 zlib 库提供了很多种压缩和解压缩的方式, nginx 使用 zlib 对 http 包的内容进行 gzip ,所以需要在 Centos 上安装 zlib 库。 yum install -y zlib zlib-devel 四. OpenSSL 安装 OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。 nginx 不仅支持 http 协议,还支持 https(即在ssl协议上传输http),所以需要在 Centos 安装 OpenSSL 库。
所有依赖配置(都装了绝对没害处) yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel openssl openssl-devel -y
编译安装,启动nginx:
1、 wget下载:
wget -c https://nginx.org/download/nginx-1.12.0.tar.gz
2、解压缩:
tar -zxvf nginx-1.12.0.tar.gz
3、 切换到你的 解压后生成的nginx-1.12.0文件夹内
4、这个时候生成了安装包 你要把你的安装的路径和信息先声明
./configure --prefix=要安装的路径
./configure --prefix=/opt/nginx1-12/ 指定安装到/opt/nginx1-12内
./configure --prefix=/opt/nginx1-12/ --with-http_ssl_module --with-http_stub_status_module 开启nginx状态检测功能
5、然后执行 安装
make && make install
6、找到你指定安装的文件夹
7、进入安装目录内的sbin目录
启动nginx,进入sbin目录,找到nginx启动命令 cd sbin ./nginx #启动 ./nginx -s stop #关闭 ./nginx -s reload #重新加载 在不用重新启动nginx的时候进行加载 防止你的程序正在跑着影响使用
然后查看你的端口: netstat -ntlp
这个时候nginx启动来了 我们进行访问看看
输入ip80端口即可进入
总结:
切换到你要下载到目录 1.下载源码包 wget -c https://nginx.org/download/nginx-1.12.0.tar.gz 2.解压缩源码 tar -zxvf nginx-1.12.0.tar.gz 3、切换到你的解压目录
cd nginx-1.12.0
4、指定安装目录
./configure --prefix=/opt/nginx1-12/
5、开始安装
make && make install
6、然后进入你的指定安装目录内
切换到 sbin目录
./nginx #启动
./nginx -s stop #关闭
./nginx -s reload #重新加载
安装完成后检测服务
netstat -tunlp |grep 80
curl -I 127.0.0.1
#如果访问不了,检查selinux,iptables
nginx配置:
前端界面显示:
html中的index.html就是你访问nginx 80端口的时候显示的
如果想改变nginx的访问界面显示就进入html目录然后编译index.html
开头是<mate charset=utf8> 格式
eg:
然后切换到sbin目录下进行重新加载
sbin下: nginx -t 看看你的nginx.conf中的配置信息是否有错误 平滑重启也是 在sbin下执行的 nginx -s reload
配置文件conf
主要配置都在nginx.conf中
我们可以根据tpo指令来查看cpu 然后摁1 查看cpu显示:
我的是单核的
一个域名只可以解析一个主机 server 虚拟主机标签是可以在 一个端口的时候进行不同的网址输入访问不同的信息
eg:
我是一个淘宝卖家 一个店铺卖鞋子 一个店铺卖娃娃,要两个网站 ,但是放置的资源都不多 难道还要两个服务器吗,这个时候我们利用nginx的server
就可以解决,一个端口不同的网址请求进入不同的网站
nginx.conf
大部分的nginx配置都是在 nginx.conf 中的
server 是你的虚拟机的配置: 也就是你访问的时候可以进行访问响应的配置
也可以修改请求的路径 来改变请求的信息
我们在/opt/static中创建一个inde.html 即可 (创建index.html 和inde.html都可以的)
基于域名的多虚拟主机实战
ginx可以自动识别用户请求的域名,根据不同的域名请求服务器传输不同的内容,只需要保证服务器上有一个可用的ip地址,配置好dns解析服务。
/etc/hosts是linux系统中本地dns解析的配置文件,同样可以达到域名访问效果
1、模拟域名解析 模拟dns服务器:
因为请求进来要解析其域名 我们没有dns服务器就只能修改hosts文件来模拟 1、准备两个域名在hosts文件中强制解析 linux可以在etc/hosts 中修改 下面以wondos为例子 C:\Windows\System32\drivers\etc\hosts (windows8 10的用户,请用管理员运行 ) 写入域名解析(自己随便写入 只有nginx的配置和这里一样即可):
你的linux服务器ip 要访问的地址1
你的linux服务器ip 要访问的地址2
2、找到nginx.conf 编辑配置文件
修改http 中的server 建立两个不通的server 对应你的访问地址
# 虚拟主机标签段 ,这里定义mytb.com server { listen 80; # 监听的端口 server_name www.mytb.com; location / { root /opt/static/mytb/; # 自定义的寻址界面 index index.html inde.html; } #error_page 404 /404.html; # 当返回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; } } # 定义myjd.com server{ listen 80; server_name www.myjd.com; location / { root /opt/static/myjd/; # 自定义的寻址界面
index index.html;
} }
修改完之后验证nginx的配置 ,并且去创建你的配置中定义的寻址文件目录
查看并且创建
然后在myjd和mytb文件夹内各自创建index.html文件 然后把填写你要显示的内容 我这里把淘宝和京东的首页源代码copy下来
这个时候我们在自己的电脑上输入对应的地址 www.mytb.com 和 www.myjd.com 就可以访问不同的界面了
nginx访问日志(access_log):
这个是帮你显示你的nginx请求之后都是你做了什么,日志不用说了 很强大的
日志功能对每个用户访问网站的日志信息记录到指定的日志文件里,开发运维人员可以分析用户的浏览器行为,此功能由ngx_http_log_module模块负责,官网地址是:
http://nginx.org/en/docs/http/ngx_http_log_module.html
控制日志的参数:
log_format 记录日志的格式,可定义多种格式 accsss_log 指定日志文件的路径以及格式
默认的存放路径是在nginx安装的目录下的路径下的logs/access.log文件
默认你屏蔽的 我们使用的时候就给它打开
对应参数解析:
$remote_addr 记录客户端ip $remote_user 远程用户,没有就是 “-” $time_local 对应[14/Aug/2018:18:46:52 +0800] $request 对应请求信息"GET /favicon.ico HTTP/1.1" $status 状态码 $body_bytes_sent 571字节 请求体的大小 $http_referer 对应“-” 由于是直接输入浏览器就是 - $http_user_agent 客户端身份信息 $http_x_forwarded_for 记录客户端的来源真实ip 97.64.34.118
当我们tail -f 查看日志的后
显示效果如下:
60.168.97.34 - - [16/Jan/2019:13:56:01 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36" "-"
日志格式配置定义:
log_format是日志关键字参数,不能变
main是日志格式指定的标签,记录日志时通过main标签选择指定的格式。
nginx限制网站来源IP访问:
如果你有时候想限制某一个ip不让其访问你的网站或者发现某一个ip在疯狂访问攻击你的网站那么就可以限制其ip
如果哪天发现你的nginx很慢,或者检查access.log时候,有一个some body疯狂请求你的nginx server,那么可以禁止这个IP访问
在location中使用 deny 来进行限制,可以限制单个ip也可以限制多个ip 也可以限制ip段
限制ip或ip段访问
location / {
deny 192.168.1.1; # 禁止这个ip访问
deny 192.168.1.0/24; # 禁止这个ip段访问
allow 10.1.1.0/16;
}
再访问就会是 然后就会显示:
nginx 的代理:
nginx实现负载均衡的组件
ngx_http_proxy_module proxy代理模块,用于把请求抛给服务器节点或者upstream服务器池
具体实现参数 :proxy_pass 跟上你的ip地址
proxy_pass 代理配置
指定ip配置 poroxy_pass http://192.168.1.123 指定端口配置 proxy_pass http://192.168.1.123:8080
正向代理
正向代理,也就是传说中的代理,他的工作原理就像一个跳板(VPN),简单的说:
我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器呢,他能访问那个我不能访问的网站,于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。
反向代理
对于客户端而言,代理服务器就像是原始服务器。
实现一个简单的反向代理:
准备两台机器一台多代理一台是你的主机
在代理主机的conf中进行配置 proxy_pass
配置单的时候加上你的要代理的主机的ip即可 有端口限制要加上端口
然后我们这个时候保存平滑重启nginx就可以通过代理主机访问到真是主机的内容了