Nginx笔记 | 青训营笔记

102 阅读4分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第4篇笔记。

nginx笔记

nginx介绍

nginx担当高性能的web服务器负载均衡器,流量网关,日志网关,日志服务器,贯穿了整个项目

image.png

  1. nginx开源版本比较干净,就是一个负载均衡和高性能服务器--开源
  2. nginx-plus东西更多,是nginx升级版本
  3. 将nginx和Lua脚本进行整合--开源
  4. 更安全,更稳定,性能更高--开源

image.png

虚拟机的安装

  1. 准备软件:
    1. Vmware
    2. Virtualbox
    3. Parallels
  2. 准备镜像
    1. Centos7.4镜像
  3. 安装与配置操作系统
    1. 配置虚拟机上网 先配置网卡,修改配置文件

image.png 2. 配置静态ip地址

image.png

image.png

image.png

image.png

  • 配置静态的ip地址,否则虚拟机会随即生成ip地址,每次连接比较麻烦

image.png

Nginx开源版本的安装

  • 首先进行解压缩nginx的tar包

image.png

  • 解压完之后进入目录用编译安装的方式进行安装,用configure配置进行安装,如图,他缺少c语言编译

image.png

  • 随即安装gcc

image.png

  • 安装nginx,挑选位置进行安装
yum install -y gcc

image.png

  • 发现缺少库,随即安装perl库
yum install -y pcre pcre-devel

image.png

  • 发现缺少zlib库,安装zlib库
yum install -y zlib zlib-devel

image.png

  • 接下来执行:make , makei nstall

启动Nginx

  • 安装成功之后进入安装好的目录** /usr/local/nginx/sbin**
  • 启动nginx
./nginx
  • 快速停止nginx
./nginx -s stop
  • 优雅关闭nginx,在退出前完成已经接受的连接请求
./nginx -s quit
  • 重新加载配置nginx
./nginx-s reload

image.png

  • 进入目录之后输入 ./nginx启动nginx之后可以在浏览器输入ip地址,发现进不去,这时候是防火墙的问题

关于防火墙

  • 关闭防火墙
systemctl stop firewalld.service
  • 禁止防火墙开机启动
systemctl disable firewalld.service
  • 放行端口
firewalld-cmd --zone=public --add-port=80/tcp --permanent
  • 查看防火墙状态
systemctl status firewalld
  • 重启防火墙
firewall-cmd --reload
  • 我们关闭防火墙

image.png 随后能进去网页

image.png

  • 随后关闭开机自启防火墙

image.png

安装系统服务

  • 因为我们每次都得自启动太麻烦,所以可以写一个脚本
  1. 创建脚本服务
vi /usr/lib/systemd/system/nginx.service
  1. 服务脚本内容---注意脚本中的路径
[Unit]

Description=nginx - web server

After=network.target remote-fs.target nss-lookup.target

[Service]

Type=forking

PIDFile=/usr/local/nginx/logs/nginx.pid

ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf

ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

ExecReload=/usr/local/nginx/sbin/nginx -s reload

ExecStop=/usr/local/nginx/sbin/nginx -s stop

ExecQuit=/usr/local/nginx/sbin/nginx -s quit

PrivateTmp=true

[Install]

WantedBy=multi-user.target
  • 先关闭之前的nginx服务
  1. 重新加载系统服务
systemctl daemon-reload
  • 通过脚本启动nginx: systemctl start nginx
  • 查看nginx状态: systemctl status nginx
  1. 开机启动
systemctl enable nginx.service

image.png

  • reboot关机,在启动试一下nginx是否自启动

目录结构与基本运行原理

  1. 目录
  • sbin中放的是启动nginx的主程序
  • html中的index.html是加载的默认页面
    • 50x.html是报错后的页面
  • logs是记录日志的
    • access.log记录访问日志,记录访问时间,请求具体文件,等等,所以这个日志可能会很大,达到一定程度会报错.
    • error.log记录错误日志
    • nginx.pid记录着893就是nginx的进程pid

image.png

  1. 更改默认页

    就是更改index.html

  2. 基本运行原理

image.png

客户端发起一个请求,nginx端主目录下/sbin有个nginx可执行文件,将这个文件跑起来,会开启master的主的进程,在主进程中读取配置文件并且再次做一个校验,然后开启子进程worker,主进程不处理业务,子进程解析请求

Nginx基础配置 (最重要的内容)

  1. 最小配置文件
  • 位置: /usr/local/nginx/conf/nginx.conf
  • nginx配置文件大量的注释文件,去掉注释文件之后的简化conf
  1. 核心配置
  2. 虚拟主机配置
#工作的子进程个数,一个cpu内核对应一个进程
worker_processes  1;

events {
//每一个worker进程对应的连接数
    worker_connections  1024;
}
#核心配置
http {
	#引用其他的配置文件mime.types到主配置文件里,记录所有mime的type,mime的type就是请求的头,头里面记录着返回或者发送的文件是什么类型
    include       mime.types;
	#如果mime.types里面没有对应的类型,哪么就用默认流形式
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

#虚拟主机,每一个主机之间互相不干扰
    server {
	#监听80端口
        listen       80;
        server_name  localhost;  #域名,主机名
	#http://lsj.cash/xxoo/index.html,location是匹配域名后面的资源  /xxoo/index.html
        location / {
	#相对路径
            root   html;
            index  index.html index.htm;
        }
	#http://lsj.cash/50x.html
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }

}