Nginx基础

Nginx简介

Nginx是一个开源且高性能、高可靠的web服务器及邮件代理服务器。它不仅支持热部署,几乎可以做到7*24小时不间断运行,还能在不中断服务的情况下对软件版本进行热更新。它由俄罗斯人伊戈尔·赛索耶夫开发。目前已被F5收购。

常见的web服务器:

httpd:Apache软件基金会
IIS:微软服务器版
GWS:由Google开发
Tengine:淘宝基于nginx进行二次开发

为什么选择nginx而不是apache

  • 轻量化。功能模块相对少,源码仅保留http核心模块代码,其它作为插件进行安装。
  • 模块化。便于二次开发,对开发人员非常友好。
  • 技术成熟。国内公司基本大规模使用,适合当前主流架构趋势。
  • 采用epoll模型。当用户发起请求,epoll模型异步非阻塞,直接进行处理,效率高,无连接限制。而Apache采用select模型会对请求进行遍历扫描,从而导致性能低下。
  • 支持热部署。 不停机更新配置文件、升级版本、更换日志文件
  • 系统内存和CPU占用率低。10000个keep-alive连接模式下的非活动连接,仅需2.5M左右的内存
  • 高并发响应性能非常好。据官方统计处理静态文件并发5W/s

Nginx应用场景

  • 静态服务应用

浏览器缓存应用
防资源盗用应用
资源分类应用
资源压缩应用
资源缓存应用
跨域访问应用

  • 代理服务应用

协议类型设置
正向代理设置
反向代理设置
负载均衡设置
代理缓存设置
动静分离设置

  • 安全服务应用

访问控制应用
流量限制应用
拦截异常攻击
拦截SQL注入

  • 流行架构应用

LNMP:Linux+Nginx+MySQL+PHP(Fastcgi_pass)
LNMT:Linux+Nginx+MySQL+Tomcat
LNMP:Linux+Nginx+MySQL+Python(uwsgi_pass)

Nginx服务部署

version:1.16.1
为省去源码编译安装的时间本次部署采用官方yum源进行安装,首先编辑/etc/yum.repos.d/nginx.repo文件添加以下内容:

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

运行yum install -y nginx命令进行安装,安装完成后可以使用rpm -ql nginx查看安装信息。

nginx应用程序命令:

nginx -s reload	#重新加载配置文件,热重启
nginx -s reopen #重启nginx
nginx -s stop	#快速关闭
nginx -s quit	#等待工作进程处理完成后关闭
nginx -T		#查看nginx最终配置
nginx -t		#检查配置是否出错

Nginx配置文件结构

#全局模块
user nginx;		#nginx进程所使用的的用户,可以不配置
worker_processes auto;		#nginx运行的work进程数量(建议与CPU数量一致或auto)
error_log /var/log/nginx/error.log;	#nginx错误日志路径
pid /run/nginx.pid;	#nginx服务运行后产生的PID进程号文件路径
include /usr/share/nginx/modules/*.conf;
worker_rlimit_nofile_number  20480;		#指定 worker 子进程可以打开的最大文件句柄数。
#指定 worker 子进程异常终止后的 core 文件,用于记录分析问题。
worker_rlimit_core	100M;		#存放大小限制
working_directory /opt/nginx/tmp; 	# 存放目录
#将每个 worker 子进程与我们的 CPU 物理核心绑定。
worker_cpu_affinity 0001 0010 0100 1000; # 4个物理核心,4个 worker 子进程
#指定 worker 子进程的优先级,值越小越优先
worker_priority -10; # 120-10=110,110 就是最终的优先级(120是linux默认进程优先级,优先级范围:-20~+19)
# 指定 worker 子进程优雅退出时的超时时间。
worker_shutdown_timeout 5s;
# worker 子进程内部使用的计时器精度,调整时间间隔越大,系统调用越少,有利于性能提升;反之,系统调用越多,性能下降。
timer_resolution 100ms;
#指定 Nginx 的运行方式,前台还是后台,前台用于调试,后台用于生产。
daemon off; # 默认是 on,后台运行模式
#事件模块
events {
	use epoll;		#使用epoll的IO模型,可选值为:select、poll、kqueue、epoll、/dev/poll、eventport
	worker_connections 1024;  #每个worker进程支持的最大连接数
	multi_accept on;       #尽可能多地接收请求
	#是否打开负载均衡互斥锁。
	accept_mutex on # 默认是 off 关闭的,这里推荐打开
	# 指定虚拟主机域名
	server_name www.nginx.com;
	#域名匹配的四种写法:匹配优先级:精确匹配->左侧匹配->右侧通配->正则匹配
	#精确匹配:server_name www.nginx.com ;
	#左侧通配:server_name *.nginx.com ;
	#右侧通配:server_name www.nginx.* ;
	#正则匹配:server_name ~^www\.nginx\.*$ ;
}
#http模块,配置最频繁的模块
http {
	# 配置日志格式
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';
# 访问日志存放目录
access_log  /var/log/nginx/access.log  main;
sendfile            on;  #是否调用sendfile函数来输出文件,建议设置为on(高校传输模式)
tcp_nopush          on;    #减少网络报文段数量,防止网络阻塞
tcp_nodelay         on;     #提高数据的实时响应性
keepalive_timeout   65; # 保持连接时间,也叫超时时间,单位为秒
types_hash_max_size 2048;
include             /etc/nginx/mime.types;
default_type        application/octet-stream;
include /etc/nginx/conf.d/*.conf;  #加载子配置项
#server模块
server {
    listen       80 default_server;  # 配置监听端口
    listen       [::]:80 default_server;
    server_name  _;
    root         /usr/share/nginx/html; #网站根目录,可以写在http、server、location等配置中
    include /etc/nginx/default.d/*.conf;	 #加载子配置项
  #location模块
    location / {
    	alias /opt/nginx/static/image/;#是指定静态资源目录位置,它只能写在 location 中。
    }
    #默认40x错误对应的访问页面
    error_page 404 /404.html;
        location = /40x.html {
    }
    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }
 }
}

全局模块:配置作用于nginx全局。一般用于定义日志路径、PID文件路径、配置文件引入、事件驱动机制进程管理等。
events模块: 配置影响nginx服务器或用户的网络连接、每个进程最大连接数、事件驱动模型等。
http模块: 可以嵌套多个server模块,配置代理和其它第三方模块的配置。
server模块: server模块也叫虚拟主机模块,用来定义虚拟主机。
location模块: 配置站点请求的理由(站点的路径)以及各种页面的处理情况。匹配规则:
在这里插入图片描述

Nginx常用模块

  • 目录索引模块:ngx_http_autoindex_module

    Syntax:	autoindex on | off;
    Default:	
    autoindex off;
    Context:	http, server, location
    

例子:

[root@localhost ~]# cd /etc/nginx/conf.d/
[root@localhost conf.d]# ls
default.conf
[root@localhost conf.d]# mv default.conf default.conf.bak 
[root@localhost conf.d]# vim www.conf
server {

    listen 80;
    server_name localhost;

    location / {
            root /test_code;
            index index.html;
            autoindex on;
            #停止处理请求
            return	URL或code [msg]; #比如return 404 "pages not found"; # 返回状态码 + 一段文本
            #根据指定正则表达式匹配规则,重写 URL。
		    if ( $uri = "/images/" ){
		     #rewrite (.*) /pics/ break;
		     rewirte /images/(.*\.jpg)$ /pic/$1; # $1是前面括号(.*\.jpg)的反向引用
		    }
                            }
}

打开网站可以看到以下效果:
在这里插入图片描述

  • 状态监控模块: ngx_http_stub_status_module

    Syntax:	stub_status;
    Default: —
    Context: server, location
    

该模块用于输出nginx基本状态信息。
在这里插入图片描述

  • 访问限制模块: ngx_http_limit_conn_module(基于连接)
    ngx_http_limit_req_module(基于请求)

    Syntax:	limit_conn zone number;
    Default:	—
    Context:	http, server, location
    

在这里插入图片描述
当每秒请求超过3次:
在这里插入图片描述

  • 访问控制模块:
  1. ngx_http_auth_basic_module(基于用户)

    Syntax:	auth_basic string | off;
    Default:	
    auth_basic off;
    Context:	http, server, location, limit_except
    ----------------------------------------------------
    Syntax:	auth_basic_user_file file;
    Default:	—
    Context:	http, server, location, limit_except
    

安装生成密码的工具:yum install -y httpd-tools
生成密码:[root@localhost test_code]# htpasswd -b -c /etc/nginx/auth_conf username 124
在这里插入图片描述

效果如下:
在这里插入图片描述

  1. ngx_http_access_module(基于IP)

    Syntax:	allow address | CIDR | unix: | all;
    Default:	—
    Context:	http, server, location, limit_except
    

在这里插入图片描述

  • 日志模块: ngx_http_log_module

默认日志配置:
在这里插入图片描述
Nginx日志格式允许包含的变量:

$remote_ addr记录客户端IP地址
$remote_ user记录客户端用户名.
$time_ local记录通用的本地时间
$time_ iso8601记录IS08601标准格式下的本地时间
$request记录请求的方法以及请求的http协议
$status记录请求状态码(用于定位错误信息)
$body_ bytes_ sent发送给客户端的资源字节数,不包括响应头的大小
$bytes_ sent发送给客户端的总字节数
$msec日志写入时间。单位为秒,精度是毫秒。
$http_ referer记录从哪个页面链接访问过来的
$http_ user_ agent记录客户端浏览器相关信息
$http_ x_ forwarded_ for记录客户端IP地址
$request_ length请求的长度(包括请求行, 请求头和请求正文)。
$request_ time请求花费的时间,单位为秒,精度毫秒

:如果Nginx位于负载均衡器,nginx反向代理之后, web服务器无法直接获取到客户端真实的IP地址。
$remote_ addr获取的是反向代理的IP地址。 反向代理服务器在转发请求的http头信息中,增加http_x-forwarded- for信息,用来记录客户端IP地址和客户端请求的服务器地址。

  • 虚拟主机:
    可以在 /etc/nginx/conf.d/ 下写多个以.conf结尾的配置文件来定义虚拟主机。
  • location模块: 使用location模块可以控制网站访问的路径,一个server模块可以有多个location,优先级如下:
匹配符匹配规则优先级
=精确匹配1
^~某个字符开头,匹配到则停止搜索2
~区分大小写匹配3
~*不区分大小写匹配4
!~区分大小写不匹配5
!~*不区分大小写不匹配6
/通用匹配,任何请求都会匹配到7

location中的反斜线/

	#当访问www.nginx.com/test是,先找是否存在test目录,存在目录则找该目录下的index.html;如果没有该目录则找test文件
    location /test {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
    #当访问www.nginx.com/test是,先找是否存在test目录,存在目录则找该目录下的index.html;如果没有直接停止
    location /test/ {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

相关参考:
Nginx官网

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值