【一】nginx基础

1. Nginx基础概述

(1) Nginx是一个开源(直接获取源代码)高性能(支持海量并发)可靠的(服务稳定 ) Http Web服务、代理服务。

(2) Nginx采用Epool网络模型,Apache采用select模型

Epoll: 当用户发起请求,epoll模型会直接进行处理,效率高效,并无连接限制。

Select: 当用户发起一次请求,select模型就会进行一次遍历扫描,从而导致性能低下。

(3) Nginx和Apache的区别

Nginx: 占用资源少、抗并发(Epool网络模型)、处理静态文件好(是apache的3倍以上)、高度模块化(容易编写模块)、配置简单(可以正则配置)、可以作为web、负载,代理服务器

Apache:
Apache的rewrite(跳转)比nginx强大、apache成熟稳定bug少(nginx较多)、apache对PHP支持简单(nginx需要配合其他后端用)apache对处理动态有优势(nginx鸡肋,nginx适合静态和反向)

(4) Nginx应用场景
在这里插入图片描述

防资源盗用: 做个防盗,不让其他的网站用调用自己的图片

正向代理: 用户通过nginx出去上网,可以设置用户不同的用户,分配不同的公网ip

反向代理: nginx作为负载,负载均衡,带着用户访问web

(5) 静态和动态web软件

静态WEB软件:
nginx、
apache、
IIS、
lighttpd、
tengine、
openresty-nginx、

动态web软件:

Tomcat、
Resin、
weblogic、
Jboss

2. Nginx安装启动

  • 安装方式

    • 源码编译 (1.版本随意 2.安装复杂 3.升级繁琐 4.规范 5.便于管理)
    • epel仓库(1.版本较低 2.安装简单 3.配置不易读)
    • 官方仓库 (1.版本较新 2.安装简单 3.配置易读)
  • 配置官方yum源

    • 官方网站 nginx.org

    • 在官方的页面最底部,点击stable and mainline
      在这里插入图片描述

    • 到达centos的官方源
      在这里插入图片描述

  • 安装Nginx服务

    • yum install nginx -y
  • 启动并设置开机自启

    • systemctl start nginx
    • systemctl enable nginx
  • 验证是否成功

    • netstat -lntup|grep 80 (端口检测)
    • ps -ef|grep nginx (进程检测)
    • http://10.0.0.7(浏览器检测)
  • 检查nginx的软件版本

    • nginx -v
  • 检查nginx的编译参数

    • nginx -V
  • Nginx两种管理方式

    • 直接输入Nginx启动,使用sytemctl启动 只能使用一种方式运行,不能混合使用
    • systemctl管理
      • systemctl reload(restart、start、stop、status) Nginx
    • nginx管理
      • nginx 启动
      • nginx -s stop 停止
      • nginx -s reload |restart 重载服务

3. Nginx配置文件

nginx配置文件:/etc/nginx/nginx.conf

核心模块:

user  nginx;									#nginx进程运行的用户
worker_processes  1;							#nginx工作的进程数量,工作中配置为和核心数量相同
error_log  /var/log/nginx/error.log warn;		#nginx的错误日志【警告及其警告以上的都记录】
pid        /var/run/nginx.pid;					#nginx进程运行后的进程id

事件模块:

events {
    worker_connections  1024;					#一个work进程的最大连接数,默认1024  65535
	use epool;									#使用epoll网络模型
}

http核心层模块:

http {
    include       /etc/nginx/mime.types;				#包含资源类型文件,媒体类型,如上面的文件中没有请求的类型,默认为下载
    default_type  application/octet-stream;				#默认以下载方式传输给浏览器(前提是该资源在mime.types中无法找到)

	日志格式定义
    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;	 高效传输	
    #tcp_nopush     on;  高效传输
    keepalive_timeout  65;  #长连接超时时间
    #gzip  on;			#是否开启压缩功能
	
	include /etc/nginx/conf.d/*.conf;		#包含哪个目录下面的*.conf文件,每个conf文件对应一个网站
	
	server {  定义一个网站
		listen       80;			#监听端口
		server_name  localhost;		#nginx的域名

		#charset koi8-r;			#字符集

		location / {	 			#位置,匹配规则,规定了用户默认访问的目录是哪一个
			root   /usr/share/nginx/html;	#代码的主文件位置
			index  index.html index.htm;	#服务端默认返回给用户的文件
		}
		location /test {	 			#位置
			root   /code/test/123/;	#代码的主文件位置
			index  index.html index.htm;	#服务端默认返回给用户的文件
		}
	}

http server location扩展了解项
http{}层下允许有多个Server{}层,一个Server{}层下又允许有多个Location

http{} 标签主要用来解决用户的请求与响应。

server{} 标签主要用来响应具体的某一个网站。

location{} 标签主要用于匹配网站具体URL路径。

Nginx配置文件相关


  /etc/nginx/nginx.conf		       # Nginx主配置文件    包含了default.conf
  /etc/nginx/conf.d/default.conf   # Nginx的主配置文件  属于Nginx.conf 中的	
   /var/log/nginx/access.log	   # 访问nginx的日志
   /var/log/nginx/error.log	      # 访问Nginx报错的日志

相关文件的路径:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. Nginx搭建一个静态资源web服务器

小技巧:非常重要,写完配置文件的时候,务必要Nginx自查!!! 如果要是没检查,配置文件错错的话,服务会直接停止

  • nginx自查
    • 修改完配置记得使用 nginx -t 检查语法
    • 如果没有检查语法,直接重载导致报错。systemctl status nginx -l 查看错误信息

(1) 编写Nginx配置文件

[root@web01 conf.d]# cat game.conf
server {
	listen 80;
	server_name game.oldboy.com;

	location / {
		root /code;
		index index.html;
	}
}

(2) 根据配置文件,创建目录,上传代码

[root@web01 ~]# mkdir /code
[root@web01 ~]# cd /code
[root@web01 code]# rz html5.zip
[root@web01 code]# unzip html5.zip 

(3)重载nginx服务

[root@web01 code]# systemctl reload nginx		#平滑重启
[root@web01 code]# systemctl restart nginx		#立即重启

(4) 配置域名解析

Windows:  C:WindowsSystem32driversetchosts
				10.0.0.7      game.oldboy.com
Mac   sudo vim /etc/hosts
				10.0.0.7      game.oldboy.com

(5)通过浏览器访问对应的项目

game.oldboy.com

小提示:

用户请求的路径:http://game.oldboy.com/game/duxinshu/index.html    

实际上服务器查找的路径: /code/game/duxinshu/index.html  

http://game.oldboy.com/game/yyncl/
code/game/yyncl/index.html

5. Nginx虚拟主机

小技巧:

5.1 多网卡多IP的方式

(1)配置多网卡多IP的方式

[root@web01 conf.d]# cat ip.conf 
server {
	listen 10.0.0.7:80;
	server_name _;

	location / {
		root /code_ip_eth0;
		index index.html;
	}
}

server {
	listen 172.16.1.7:80;
	server_name _;

	location / {
		root /code_ip_eth1;
		index index.html;
	}
}

(2)根据配置创建目录

[root@web01 conf.d]# mkdir /code_ip_eth0
[root@web01 conf.d]# echo "Eth0" > /code_ip_eth0/index.html

[root@web01 conf.d]# mkdir /code_ip_eth1
[root@web01 conf.d]# echo "Eth1" > /code_ip_eth1/index.html

(3)重启nginx服务

[root@web01 conf.d]# systemctl restart nginx

(4)使用curl命令测试

[root@web01 ~]# curl 172.16.1.7
Eth1
[root@web01 ~]# curl 10.0.0.7
Eth0

5.2 基于端口的配置方式

(1)配置多端口的虚拟主机

[root@web01 conf.d]# vim port.conf
server {
        listen 81;
        
        location / { 
                root /code_81;
                index index.html;
        }
}
server {
        listen 82;
        
        location / { 
                root /code_82;
                index index.html;
        }
}		

(2)根据配置文件创建所需的目录

[root@web01 conf.d]# mkdir /code_8{1..2}
[root@web01 conf.d]# echo "81" > /code_81/index.html
[root@web01 conf.d]# echo "82" > /code_82/index.html

(3)检查语法并重启服务

[root@web01 conf.d]# ngin x -t
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@web01 conf.d]# systemctl restart nginx

(4)如何去访问

http://10.0.0.7:82/  

5.3 基于多个hosts名称方式(多域名方式)

(1)准备多虚拟主机配置文件

[root@web01 conf.d]# cat test1.oldboy.com.conf 
server {
	listen 80;
	server_name test1.oldboy.com;

	location / {
		root /code/test1;
		index index.html;
	}
}

[root@web01 conf.d]# cat test2.oldboy.com.conf 
server {
	listen 80;
	server_name test2.oldboy.com;

	location / {
		root /code/test2;
		index index.html;
	}
}

(2)根据配置文件创建对应的目录

[root@web01 conf.d]# mkdir /code/test{1..2} -p
[root@web01 conf.d]# echo "test1_server" > /code/test1/index.html
[root@web01 conf.d]# echo "test2_server" > /code/test2/index.html
[root@web01 conf.d]# nginx -t
[root@web01 conf.d]# systemctl restart nginx

(3) 配置域名解析

10.0.0.7      test1.oldboy.com
10.0.0.7      test2.oldboy.com  

(4)通过浏览器访问该网站

6. Nginx日志管理

(1)log_format的作用是定义日志格式语法
在这里插入图片描述

(2)nginx默认日志格式语法如下:

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

在这里插入图片描述

(3) Nginx日志格式允许包含的内置变量

$remote_addr        # 记录客户端IP地址
$remote_user        # 记录客户端用户名
$time_local         # 记录通用的本地时间
$time_iso8601       # 记录ISO8601标准格式下的本地时间
$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头信息中,
# 增加X-Forwarded-For信息,用来记录客户端IP地址和客户端请求的服务器地址。

(4)access_log日志配置语法
意思就是,你的日志的格式你定义好了,然后直接调用那个格式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wmqnnSBP-1639931026003)(D31E30D30FF2491AAF185208E148D64D)]

(5)Nginx Access日志配置实践

server {
    listen 80;
    server_name code.oldboy.com;
    
    #将当前的server网站的访问日志记录至对应的目录,使用main格式
    access_log /var/log/nginx/code.oldboy.com.log main;
    location / {
        root /code;
    }
	
    #当有人请求改favicon.ico时,不记录日志
    location /favicon.ico {
        access_log off;
        return 200;  
    
    }
    location /favicon.ico {  
    # 将图标保存到指定的访问目录
     root  /data/nginx/html ; 
     }
}

小提示:
在这里插入图片描述

7. Nginx日志切割

使用logrotate切割日志

[root@nginx conf.d]# cat /etc/logrotate.d/nginx
/var/log/nginx/*.log {
        daily                   # 每天切割日志
        missingok               # 日志丢失忽略
        rotate 52               # 日志保留52天
        compress                # 日志文件压缩
        delaycompress           # 延迟压缩日志
        notifempty              # 不切割空文件
        create 640 nginx adm    # 日志文件权限
        sharedscripts
        postrotate      # 切割日志执行的命令
                if [ -f /var/run/nginx.pid ]; then
                        kill -USR1 `cat /var/run/nginx.pid`
                fi
        endscript
}

日志切割后的效果

[root@oldboy ~]# ll /var/log/nginx/
total 4044
-rw-r----- 1 www adm  54438 Oct 12 03:28 access.log-20181012.gz
-rw-r----- 1 www adm  28657 Oct 13 03:48 access.log-20181013.gz
-rw-r----- 1 www adm  10135 Oct 12 03:28 error.log-20181130.gz
-rw-r----- 1 www adm   7452 Oct 13 03:48 error.log-20181201.gz

8. 自我总结

(1)微服务:就类似于soa 京东的模式,把多个功能分块坏,不至于坏一个功能,整个功能都坏掉。云架构、中间层:代理的形式

(2)一台服务器最大的连接时65535,只有这么多的端口,一个连接可能会打开多个文件描述符,文件描述符可以调大一点。

(3)动静分离:动态的数据和静态的数据分开处理
nginx能做缓存服务,很多cdn公司拿nginx做的缓存
(4)web服务都仅仅处理静态资源html css js 字体 doc mp4都属于静态资源
直接通过磁盘,返回给用户,然后浏览器做一次加载,人类可识别的

(5)动态资源:需要查询数据库 ,通过内存,加载解析,然后返回要给页面给用用户的
–lock-path=/var/run/nginx.lock锁路径就是nginx启动,就会touch一个文件出来,防止再次启动

(6)nginx -t 检查语法错误
systemctl status nginx -l 可以详细的看看报错

(7)nginx 回车启动–>再源码编译的时候会使用,再源码编译的时候,并没有给我们提供,nginx启动和停止的管理配置文件。 systemctl 用yum装会提供
注意: 这两种方式不能混着用,只能用一种

(8)如果cpu的核心数是16,就会把work_pricesses 改成16。每个核心可以处理2-3w,这个不好说。

(9)再event时间模块nginx默认使用的就是epoll网络模式,可以再时间里面不用写

(10)长连接的超时时间:如果用户不在点击页面,超过了超时时间,然后自动断开连接

(11)/etc/nginx/mime.types 资源类型与我呢间的对应,如果访问的文件没有对应关系,直接点击的话,会下载文件,如果有的话可以在线访问,也可以下载(鼠标右击选下载)。

(12)再生产上面一般用平滑重启,windows域名解析 /windows/system32/drivers/etc/hosts

(13)直接再/etc/nginx/conf.d/ 多加一个配置文件,多加一个server相当于多加一个网站 ,server_name ;""代表是空,可以用ip去访问

(14)
listen 10.0.0.7:80 只能通过10.0.0.7才能访问我的80端口,如果只写80端口,不管是eth0
还是eth1都能访问我的网站

(15)这里把default.conf文件给删除了,如果不想删,则使用gzip default.conf进行压缩,因为这个和ip.conf都是通过ip访问的,以免冲突,所以以后再测试的时候,一面冲突,把不需要的改个名字,或者压缩一个压缩包
(16)在/etc/nginx/nginx.conf 下 nginx -t 检查语法 没问题了在进行重启nginx,就这个文件中有/etc/nginx/conf.d/*.conf

(17)多IP的方式不好记。访问一个IP,一个IP对应不同端口,不同的端口对应不同的项目,
在公司的内部用的还是比较多的,因为没有域名,访问不同的端口来实现。这个不适合对外,端口被人记不住。这几个项目是公司内部人使用的,这时候没有域名,这时
就用端口的方式解决,只限于企业内部用,对外不用这个

(18)基于多个hosts名称方式(多域名方式)最最常用的一种方式
可以把多个server写入一个文件中,也可以分成多个文件 比如 vhost1.conf vhost2.conf
如果不想开哪个站点,直接gzip关掉即可
每一个域名写一个配置文件

(19)
会把请求抛给http,http会询问谁的server_name是 test3.oldboy.com,当找不到server_name域名
匹配的时候,又把域名解析到我的服务器上面来了,选择一个配置文件名最靠前的文件名给你

(20)nginx -t 是检查的是这一个配置文件/etc/nginx/nginx.conf
如果是第三行出问题了,则vim +3 1.sh 直接定位到第三行
在重启nginx的时候一定要检查语法,一旦写错了,在检查nginx会把nginx杀掉了,起不来了,这个网站马上就崩了,一定要先检查语法,然后再systemctl reload nginx

(21)服务没起来怎么查(nginx -t),服务起来怎么查(/var/log/nginx/error_)

(22)日志切割:用yum安装之后,就会有个程序
这个logrotate服务默认系统是有的,只是nginx提供一个日志切割文件,来
使用这个服务,给nginx主机名发送一个信号,告诉他重新把日志文件
reload一下

(23)zcat 可以查看.zip压缩包里面的内容 但是仅次于压缩包里只有一个文件

(24)/etc/logrotate.d/nginx 这个文件不用调整,不用动
用yum安装的话不用写脚本,直接提供配置文件
用源码安装的可能会写脚本

(25)虚拟主机:一个nginx上面跑多个项目。多域名虚拟主机(重要),其他的不重要

(26)ping -c1 -W1 10.0.0.1

    -c 1 要求回应的次数(1次)
    -W 1 在1秒后退出

(27)curl -I 10.0.0.7:/index.html 使用这个返回的是头部消息

(28) nginx的进程

在这里插入图片描述

(29) 连接放到页面上就是网页 ,/var/log/httpd/error

(30) 查看dns的过程

 yum -y install bind-utils  
 
 nslookup  
 

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>