Nginx简介

Nginx是一个高性能WEB服务器,除了它之外还有Apache、Tomcat、Jetty、IIS等都是WEB服务器。相应的也都有具备Web服务的基本功能。

Nginx的优势

  • Tomcat、Jetty面向java语言,先天就是重量级的Web服务器。
  • IIS只能在Windows操作系统上运行,但是Window作为服务器从稳定性等方面都不如类似UNIX等系统,所以需要高性能Web服务器的场合下IIS并不占优势;
  • Apache的发展时期很长,作为世界第一大Web服务器,它有许多优点,如稳定、开源、跨平台等。但是由于长期发展,性能完善,逐渐被设计成一个重量级、不支持高并发的Web服务器。若有数以万计的HTTP请求同时访问,就会导致服务器上消耗大量内存,操作系统内核对成百上千Apache进程进行管理也会消耗大量CPU资源。

iis和nginx区别 nginx好还是iis好_iis和nginx区别

Nginx的编译与安装

安装环境准备

Linux内核2.6以上版本

因为只有2.6之后才支持epool,在此之前使用select或pool多路复用IO模型,无法解决高并发压力的问题。可以通过uname -a来查看系统内核版本。

iis和nginx区别 nginx好还是iis好_服务器_02


GCC编译器

GCC(GNU Compiler Conllection)可用来编译C语言程序,Nginx不会直接提供二进制可执行程序,只能下载源码进行编译;

PCRE库
PCRE(Perl Compatible Regular Expressions)该库支持正则表达式;

zlib库
用于对HTTP包的内容做gzip格式的压缩,可以减少网络传输量。

OpenSSL开发库
为了能支持在更安全的SSL协议上传输HTTP,另外还支持MD5、SHA1等散列函数。

[root@localhost installpack]# yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel pcre pcre-devel
下载nginx源码

官网下载:http://nginx.org/en/download.html

iis和nginx区别 nginx好还是iis好_iis和nginx区别_03


解压

tar -zxvf nginx-1.18.0.tar.gz

编译安装

./configure && make && make install

查看版本

[root@localhost sbin]# pwd
/usr/local/nginx/sbin
[root@localhost sbin]# ./nginx -v
nginx version: nginx/1.18.0

启动

./nginx

浏览器访问

iis和nginx区别 nginx好还是iis好_nginx_04

更新nginx配置模块

模块更新

./configure --with-pcre --with-http_stub_status_module --with-http_ssl_module
make

备份之前的配置

iis和nginx区别 nginx好还是iis好_html_05


iis和nginx区别 nginx好还是iis好_iis和nginx区别_06


将目前的配置拷贝到安装目录

iis和nginx区别 nginx好还是iis好_服务器_07

nginx控制命令
#查看命令帮助
./sbin/nginx -?
#默认方式启动
./sbin/nginx
#指定配置文件启动
./sbin/nginx -c /tmp/nginx.conf
#指定nginx程序目录启动
./sbin/nginx -p /usr/local/nginx
#快速停止
./sbin/nginx -s stop
#优雅停止
./sbin/nginx -s quit
#热装载配置文件
./sbin/nginx -s reload
#重新打开日志文件
./sbin/nginx -s reopen
#设置全局命令
./sbin/nginx -g "user root;"

Nginx架构说明

iis和nginx区别 nginx好还是iis好_html_08

  • Master进程:不处理网络请求,主要负责调度工作进程,加载配置,启动工作进程及非停止升级,所以,nginx启动以后,查看操作系统的进程列表,就能看到至少有两个nginx进程;
  • 服务器实际上处理网络请求及相应的是工作进程(Worker),在类UNIX系统上,nginx可以配置多个worker,而每个worker进程都可以同时处理数以千计的网络请求。
  • 模块化设计:nginx的worker包括核心和功能性模块。核心模块负责为之一个运行循环,执行网络请求处理的不同阶段的模块功能,如网络读写、存储读写、内容传输、外出过滤,以及将请求发往上游服务器等。而其代码的模块化设计,也使得我们可以根据需要对其功能模块进行适当的选择和修改,编译成具有特定功能的服务器。
  • 事件驱动、异步及非阻塞,可以说是nginx的一获得高并发、高性能的关键隐私,同时得益于对Linux、Solaris等操作系统内核中事件通知及IO性能增强功能的采用,如kqueue、epoll及event ports。

Nginx核心模块

iis和nginx区别 nginx好还是iis好_html_09

核心模块的讲解以及用法:http://nginx.org/en/docs/

Nginx配置与使用

配置文件的语法格式

基础配置说明

#属性  属性参数
#配置nginx worker进程数量
worker_processes  1;

#配置块
#时间模块配置
events {
    #属性
    #每个worker 进程可以接受最大连接数
    worker_connections  1024;
}

# http服务根路径,里面可以包含多个server
http {
     
     # 参数
    include       mime.types;
    default_type  application/octet-stream;
    
    # 是否可以发送文件
    sendfile        on;
    
    # 超时时间
    keepalive_timeout  65;

    #server 模块
    server {

    	# 监听端口
	listen       80;
	
	# 指向哪个服务器,可以有多个,匹配优先级:全路径匹配 > 通配符匹配左边大于右边
        server_name  localhost;
        
	# 可以有多个location,指定访问路径
	location / {
	    # 当前站点的根目录(相对于nginx)
            root   html;
            index  index.html index.htm;
        }
	location /static {
            root   html;

            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
    #server 模块
    server {
    	# 监听端口
	listen       80;
	# 服务域名设置
        server_name  localhost;
	location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
配置静态代理

新增配置

server {
        listen       80;
        server_name  www.hello.com;
        root /www/hello/;
        location / {
                index index.html;
                }
        }

检查配置是否有语法错误

iis和nginx区别 nginx好还是iis好_服务器_10


重新加载配置更改本地hosts文件

iis和nginx区别 nginx好还是iis好_服务器_11


iis和nginx区别 nginx好还是iis好_服务器_12

location

语法:location[=|~|~*|^~|@]/url/{......}

  1. =表示把URI作为字符串,以便参数中的uri做完全匹配;
  2. / 基于uri目录匹配
  3. ~ 表示正则匹配URI时是字母大小写敏感的;
  4. ~* 表示正则匹配URI时忽略字母大小写;
  5. ^~ 表示正则匹配URl是只需要前半部分与uri参数匹配即可。

匹配优先规则

精确匹配 > 正则匹配 > 前缀最大匹配 > 配置靠前

root指定站点根目录
可配置在server与location中,基于ROOT路径+URL中路径去寻找指定文件;

alias指定站点别名
只能配置location中,基于alias路径+URL移除location 前缀后的路径来寻找文件;

配置动静分离代理
  • 创建静态站点
  • 配置location /static
  • 配置 ~*.(gif|png|css|js)$

基于目录动静分离

# 基于目录访问
		location /static {
           autoindex on;
           alias /www/static;
           }
        # 基于正则表达式匹配
        location ~* \.(gif|jpg|png|css|js)$ {
           root /www/static;
        }

iis和nginx区别 nginx好还是iis好_iis和nginx区别_13


iis和nginx区别 nginx好还是iis好_html_14

防盗链配置

location里面加上,只有hello域名能访问。

invalid_referers none blocked *.hello.com;
if($invalid_referers){
	return 403;
}

新增一个域名

iis和nginx区别 nginx好还是iis好_服务器_15

通过两个域名都可以访问图片;

iis和nginx区别 nginx好还是iis好_服务器_16


iis和nginx区别 nginx好还是iis好_iis和nginx区别_17

给图片添加防盗链

location ~* \.(gif|jpg|png|css|js)$ {
        valid_referers none blocked *.hello.com;
        if ( $invalid_referer ){
        return 403;
        }
           root /www/static;
        }
    }

除了hello域名,别的路径都访问不到图片了。

iis和nginx区别 nginx好还是iis好_nginx_18

下载限速

location /download {
	limit_rate 1m; #限制每秒下载速度;
	limit_rate_after 30m; //下载30m之后再限速
}

创建IP黑名单

# 封禁指定IP
deny IP;
allow IP;
# 开放指定IP段
allow IP/子网掩码
# 封禁所有
deny all;
#开放所有
allow all;
#创建黑名单文件
echo 'deny IP;' >> balck.ip

# http配置块中引入黑名单文件
include black.ip