Nginx入门

Stella981
• 阅读 539

想必大家都听过大名鼎鼎的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

Nginx入门

 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文件夹内

Nginx入门

 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、找到你指定安装的文件夹

Nginx入门

7、进入安装目录内的sbin目录

启动nginx,进入sbin目录,找到nginx启动命令
cd sbin
./nginx #启动
./nginx -s stop #关闭
./nginx -s reload #重新加载 在不用重新启动nginx的时候进行加载  防止你的程序正在跑着影响使用

然后查看你的端口: netstat -ntlp

Nginx入门

这个时候nginx启动来了 我们进行访问看看

输入ip80端口即可进入

Nginx入门

 总结:

切换到你要下载到目录

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.04、指定安装目录

./configure --prefix=/opt/nginx1-12/

5、开始安装make && make  install6、然后进入你的指定安装目录内切换到 sbin目录

./nginx #启动./nginx -s stop #关闭./nginx -s reload #重新加载

安装完成后检测服务

netstat -tunlp |grep 80curl -I 127.0.0.1#如果访问不了,检查selinux,iptables

nginx配置:

Nginx入门

前端界面显示:

html中的index.html就是你访问nginx  80端口的时候显示的

Nginx入门

 如果想改变nginx的访问界面显示就进入html目录然后编译index.html

开头是** 格式**

eg:Nginx入门

 然后切换到sbin目录下进行重新加载

Nginx入门

sbin下:


nginx -t 看看你的nginx.conf中的配置信息是否有错误

平滑重启也是 在sbin下执行的 nginx -s reload

配置文件conf

 主要配置都在nginx.conf中

Nginx入门

我们可以根据tpo指令来查看cpu 然后摁1 查看cpu显示:

Nginx入门

 我的是单核的

一个域名只可以解析一个主机 server 虚拟主机标签是可以在 一个端口的时候进行不同的网址输入访问不同的信息

eg:

  我是一个淘宝卖家 一个店铺卖鞋子 一个店铺卖娃娃,要两个网站 ,但是放置的资源都不多 难道还要两个服务器吗,这个时候我们利用nginx的server

  就可以解决,一个端口不同的网址请求进入不同的网站

nginx.conf

大部分的nginx配置都是在   **nginx.conf ** 中的

 Nginx入门

 server 是你的虚拟机的配置: 也就是你访问的时候可以进行访问响应的配置

Nginx入门

也可以修改请求的路径 来改变请求的信息

Nginx入门

 我们在/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  

    
          

 Nginx入门

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的配置 ,并且去创建你的配置中定义的寻址文件目录

Nginx入门

 查看并且创建

Nginx入门

然后在myjd和mytb文件夹内各自创建index.html文件 然后把填写你要显示的内容 我这里把淘宝和京东的首页源代码copy下来

Nginx入门

 这个时候我们在自己的电脑上输入对应的地址  www.mytb.comwww.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入门

默认的存放路径是在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入门

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入门

 然后我们这个时候保存平滑重启nginx就可以通过代理主机访问到真是主机的内容了

Nginx入门

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
2年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这