文章目录

  • 1. Nginx基础概述
  • 2. Nginx安装启动
  • 3. Nginx配置文件
  • 4. Nginx搭建一个静态资源web服务器
  • 5. Nginx虚拟主机
    • 5.1 多网卡多IP的方式
    • 5.2 基于端口的配置方式
    • 5.3 基于多个hosts名称方式(多域名方式)
  • 6. Nginx日志管理
  • 7. Nginx日志切割
  • 8. 自我总结

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  65535use 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:\Windows\System32\drivers\etc\hosts10.0.0.7      game.oldboy.com
Mac   sudo vim /etc/hosts10.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 -tnginx: the configuration file /etc/nginx/nginx.conf syntax is oknginx: 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    # 日志文件权限sharedscriptspostrotate      # 切割日志执行的命令if [ -f /var/run/nginx.pid ]; thenkill -USR1 `cat /var/run/nginx.pid`fiendscript
}

日志切割后的效果

[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  

nginx基础(七)相关推荐

  1. Nginx基础应用配置小结 - 运维笔记

    Nginx基础应用配置小结 - 运维笔记 在linux系统下使用nginx作为web应用服务,用来提升网站访问速度的经验已五年多了,今天在此对nginx的使用做一简单总结. 一.nginx服务简介 N ...

  2. C++学习基础七——深复制与浅复制

    C++学习基础七--深复制与浅复制 一.深复制与浅复制基本知识 深复制和浅复制,又称为深拷贝和浅拷贝. 深复制和浅复制的区别如下图1所示: 图1 图1表示的是,定义一个类CDemo,包含int a和c ...

  3. JAVA基础七 类和对象

    文章目录 JAVA基础七 类和对象 01 引用 02 继承 03 方法重载 04 构造方法 05 this 06 传参 07 包 08 访问修饰符 09 类属性 10 类方法 11 属性初始化 12 ...

  4. 视频教程-PHP零基础七天入门视频课程(免费50章)-PHP

    PHP零基础七天入门视频课程(免费50章) 04年进入计算机行业.拥有6年net和php项目开发经验,8年java项目开发经验. 现前端全栈工程师,主攻产品设计,微信开发等. 黄菊华 ¥159.00 ...

  5. Pascal基础(七)-Pascal泛型

    Pascal基础(七)-Pascal泛型 前言 目前很多语言都有泛型或者类似实现 C语言比较古老,没有泛型实现 C++ 有template来实现,个人对c++不懂,应该template和泛型不一样 j ...

  6. Nginx基础学习笔记(正向/反向代理,Nginx均衡负载和配置)

    目录 1. 正向代理和反向代理 1.1 正向代理 (1)什么是正向代理? (2)正向代理的特点 (3)正向代理的用途 1.2 反向代理 (1)什么是反向代理? (2)反向代理的特点 (3)反向代理的用 ...

  7. linux 安装nginx 详解教程 nginx基础命令

    目录 一.nginx 安装 二.nginx 配置 三.nginx 基础命令 1.帮助命令 2.nginx启动命令 3.查看nginx启动进程 ​4.nginx停止 5.nginx重启 ​ 6.重新加载 ...

  8. Nginx基础篇-Nginx 源码编译安装与平滑升级

    Nginx基础篇-Nginx 源码编译安装与平滑升级 Nginx官网下载地址 http://nginx.org/ 1.安装依赖包 yum -y install pcre-devel zlib-deve ...

  9. Linux nginx 基础介绍与安装版本选择

    Linux nginx 基础介绍与安装版本选择 Nginx 版本类型 Nginx yum 安装 了解 Nginx 配置文件 Nginx 编译参数详解(源码编译安装时使用) Nginx 基本配置 创建N ...

最新文章

  1. 外中断03 - 零基础入门学习汇编语言71
  2. python编程第四版_清华编程教授强力推荐《Python编程》,指导你如何学习python
  3. 转- java单例模式几种实现方式
  4. 深入浅出linux工具与编程 下载,8208.深入浅出Linux工具与编程.pdf
  5. C# 动态创建数据库三(MySQL)
  6. [bzoj1009](HNOI2008)GT考试 (kmp+矩阵快速幂加速递推)
  7. 【clickhouse】基于ClickHouse的海量数据交互式OLAP分析场景实践
  8. JDK/Java SE官方文档汇总
  9. 玩游戏?或许游戏正在拯救部分人
  10. Vs2010创建WebService
  11. 【文本分类】几个可作为Baseline的模型
  12. 仿照LFW的pair.txt生成自己数据集的txt文件
  13. Springboot 下 ModelAndView 的简单使用
  14. MPUSH消息推送服务器搭建,MPUSH消息推送服務器搭建
  15. 微信公众号之测试号申请
  16. Struts1 和 Struts2
  17. c语言 算术平均滤波法_算术平均滤波C程序
  18. 360漏洞修复出现网管版 将探路企业级市场?
  19. kubernetes如何解决服务依赖呢?
  20. 计算机专业跨考为什么考不了,浙江大学计算机专业考研,为什么这么多跨考计算机...

热门文章

  1. 一线程序员带你实践学习企业实战C/C++程序员课程
  2. 重庆计算机一级知识点,重庆市计算机一级题库(加答案)
  3. css如何让背景上下居中显示,CSS有哪些方式可以实现垂直居中?
  4. ISP图像对齐(二):Deep Image Homography Estimation
  5. windows mysql 登录报错 ERROR 1045 已解决
  6. 糖尿病遗传风险检测挑战赛-Coggle 30 Days of ML
  7. MATLAB Jacobi迭代法求解
  8. 离散数学复习:命题逻辑
  9. HBuilder输入变成繁体处理方法
  10. 单节磷酸铁锂电池充电管理芯片IC驱动方案3.6V充电芯片手电筒_低压应急球泡灯适用