nginx入门

Posted 可爱的红领巾

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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就可以通过代理主机访问到真是主机的内容了

  

 

以上是关于nginx入门的主要内容,如果未能解决你的问题,请参考以下文章

Atom编辑器入门到精通 Atom使用进阶

Cg入门20:Fragment shader - 片段级模型动态变色(实现汽车动态换漆)

Cg入门19:Fragment shader - 片段级模型动态变色

nginx.conf 忽略了 nginx-ingress 配置映射片段

将 nginx rtmp 片段发送到 WebRTC

text 有用的nginx命令和片段