8.Nginx基础

Nginx基础


Nginx初识

WEB服务


  • WEB服务:网站服务:部署并启动服务就可以搭建网站
  • WEB中间件:等同于WEB服务
  • 中间件:范围更加广泛,指负载均衡之后的服务
  • 数据库中间件:数据库缓存,消息队列

Nginx基础概述


#nginx简述
Nginx一个开源且高性能、可靠的 Http Web服务、代理服务。
开源:直接获取源代码
高性能: 支持海量并发 
可靠: 服务稳定

#选择 nginx 服务的理由
Nginx非常轻量
功能模块少 (源代码仅保留http与核心模块代码,其余不够核心代码会作为插件来安装)
代码模块化 (易读,便于二次开发,对于开发人员非常友好)
互联网公司都选择 Nginx

1.Nginx技术成熟,具备的功能是企业最常使用而且最需要的
2.适合当前主流架构趋势, 微服务、云架构、中间层
3.统一技术栈, 降低维护成本, 降低技术更新成本。
Nginx采用Epool网络模型,Apache采用Select模型
Select: 当用户发起一次请求,select模型就会进行一次遍历扫描,从而导致性能低下。
Epool: 当用户发起请求,epool模型会直接进行处理,效率高效,并无连接限制。

Nginx快速安装


Nginx的安装方式

1.源码编译=>Nginx (1.版本随意 2.安装复杂 3.升级繁琐 4.规范 5.便于管理)

2.epel仓库=>Nginx (1.版本较低 2.安装简单 3.配置不易读)

3.官方仓库=>Nginx (1.版本较新 2.安装简单 3.配置易读)

Nginx官方仓库下载


# 添加nginx源
vim /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
# 安装nginx
yum install -y nginx
nginx-1.26.0

Nginx启停


# 启动nginx
systemctl start nginx
nginx
# 停止nginx
systemctl stop nginx
nginx -s stop
# 重启nginx
systemctl restart nginx
nginx -s restart
# 重载
systemctl reload nginx

Nginx目录详解

目录结构详细说明
/etc/nginxnginx各种配置文件的目录
/etc/nginx/nginx.conf主配置文件
/etc/nginx/conf.d/子配置文件
/etc/nginx/conf.d/default.conf默认子配置文件
/usr/sbin/nginxnginx命令
/usr/share/nginx/htmlnginx默认的站点目录(404存在的地方),网站的根目录
/var/log/nginxnginx日志文件
其他目录结构详细说明
/etc/logrotate.d/nginxNginx默认的日志切割
/usr/sbin/nginx-debugNginx命令行与终端调试工具
/etc/nginx/mime.typesContent-Type与扩展名
/etc/nginx/koi-winNginx编码转换映射文件
/etc/nginx/koi-utfNginx编码转换映射文件
/etc/nginx/win-utfNginx编码转换映射文件
/etc/nginx/uwsgi_paramsuwsgi代理配置文件
/etc/nginx/scgi_paramsscgi代理配置文件
/etc/nginx/fastcgi_paramsFastcgi代理配置文件

Nginx主配置文件讲解

# 核心模块
user nginx; # 启动nignx的用户
worker_processes auto; # nginxworker进程数 auto是根据服务器的cpu自行判断
error_log /var/log/nginx/error.log notice; # 错误日志的路径和文件名称
pid       /var/run/nginx.pid; # nginx进程的pid信息
# 事件驱动模块
events {
	worker_connections 1024;#每个worker进程支持的最大连接数
	use epoll; #事件驱动模型, epoll默认
}

# HttpCoreModule(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一起使用
    tcp_nopush on;
    # 搭配sendfile一起使用
    tcp_nodelay on;
    
    # 长连接格式超时时间是65s
    keepalive_timeout 65;
    types_hash_max_size 4096;
    
    # nginx引用媒体类型
    include /etc/nginx/mime.types;
    # 默认类型
    default_type application/octet-stream;
    
    
    # nignx网站相关配置文件的编写路径 和文件和格式
    include /etc/nginx/conf.d/*.conf;
    
    server {
        listen 80; # nginx默认的端口 80
        listen [::]:80;
        server_name _; # 提供的域名
        root /usr/share/nginx/html; # 站点目录 存放网站代码的目录
        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;
        
        error_page 404 /404.html;
        location = /404.html {
        }
        
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }
}
	

应用1:简单配置一个nginx网页

# 编辑nginx的配置文件
[root@web01 ~]# vim /etc/nginx/conf.d/1.conf
server{
        listen 80;
        server_name www.hh.com;
        root /code/h5_games;
        index index.html;
}

#创建站点目录
[root@web01 ~]# mkdir /code

#准备索引文件
[root@web01 ~]# echo 123 > /code/index.html
[root@web01 code]# cat index.html 
12

# 启动nginx
[root@web01 code]# systemctl restart nginx


#检查端口和进程还有服务是否启动
[root@web01 code]# systemctl status nginx
● nginx.service - nginx - high performance web server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2024-05-22 12:15:48 CST; 5h 41min ago
     Docs: http://nginx.org/en/docs/
  Process: 19765 ExecStop=/bin/sh -c /bin/kill -s TERM $(/bin/cat /var/run/nginx.pid) (code=exited, status=0/SUCCESS)
  Process: 19769 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
 Main PID: 19770 (nginx)
   CGroup: /system.slice/nginx.service
           ├─19770 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
           └─19771 nginx: worker process

May 22 12:15:48 web01 systemd[1]: Stopped nginx - high performance web server.
May 22 12:15:48 web01 systemd[1]: Starting nginx - high performance web server...
May 22 12:15:48 web01 systemd[1]: PID file /var/run/nginx.pid not readable (yet?) after start.
May 22 12:15:48 web01 systemd[1]: Started nginx - high performance web server.
[root@web01 code]# ps -ef|grep [n]ginx
root      19770      1  0 12:15 ?        00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx     19771  19770  0 12:15 ?        00:00:00 nginx: worker process
[root@web01 code]# ss -lntup|grep [n]ginx
tcp    LISTEN     0      128       *:80                    *:*                   users:(("nginx",pid=19771,fd=6),("nginx",pid=19770,fd=6))

#本地DNS
1.win + r
2.命令行输入drivers
3.打开目录 etc
4.编译hosts文件
5.添加一行 10.0.0.7 www.hh.com

应用2:简单搭建一个游戏网页和网站页面并加入日志文件

#安装nginx
yum installl -y nginx

# 编辑123网站配置文件
server{
    listen 80;
    server_name test.hh.com;
    root /test1;
    index index.html;
    access_log /var/log/nginx/test1/test1_access.log main;
}

# 编辑小游戏配置网站
server{
	listen 80;
    server_name game.hh.com;
    root /test2/h5_games;
    index index.html;
    access_log /var/log/nginx/test2/game_access.log main;
}

# 检测语法
nginx -t

# 创建日志存储路径
mkdir /var/log/nginx/test{1,2}

# 创建站点目录
[root@web01 conf.d]# mkdir /test1
[root@web01 conf.d]# mkdir /test2

# 准备第一个网站的索引文件
[root@web01 conf.d]# echo test > /test1/index.html
[root@web01 conf.d]# cat /test1/index.html
test

# 准备小游戏的代码
wget http://test.driverzeng.com/Nginx_Code/h5_games.zip
unzip h5_games.zip

# 启动nginx
systemctl start nginx

# 检查nginx进程 和 端口
[root@web01 test2]# ps -ef | grep [n]ginx
root 8079 8036 0 08:35 pts/1 00:00:00 vim /etc/nginx/nginx.conf
root 8157 1 0 08:43 ? 00:00:00 nginx: master process
/usr/sbin/nginx
nginx 8159 8157 0 08:43 ? 00:00:00 nginx: worker process

[root@web01 test2]# netstat -lntup | grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
8157/nginx: master
tcp6 0 0 :::80 :::* LISTEN
8157/nginx: master

# 本地DNS域名解析
10.0.0.7 test.hh.com game.hh.com

# 访问网站

应用3:搭建wordpress

# 安装nginx和php
yum install -y php-rpm nginx

# 安装mariadb
yum install -y mariadb-server

# 编辑wordpress配置文件
server {
    listen 80;
    server_name wp.hh.com;
    root /code/wordpress;
    location / {
    	index index.php index.html;
	}
    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME   $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

# 准备网站代码
cd /code
wordpress-5.0.3-zh_CN.tar.gz
tar xf wordpress-5.0.3-zh_CN.tar.gz

# 重启nginx 和 php
systemctl restart nginx php-fpm

# 启动mariadb
systemctl start mariadb

# 确认端口
80
9000
3306

# 本地dns解析
10.0.0.7 wp.hh.com

虚拟主机


Nginx配置虚拟主机有如下三种方式:

方式一、基于主机多IP方式

方式二、基于多端口的配置方式

方式三、基于多个hosts名称方式*(多域名方式)*

1——多ip的虚拟主机方式

在这里插入图片描述

# 添加虚拟IP
ip addr add 10.0.0.11/24 dev eth0
ip addr add 10.0.0.12/24 dev eth0

# 查看ip(只能通过ip a查看 ,ifconfig看不到)
[root@web01 conf.d]# ip a
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:a7:b8:91 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.7/24 brd 10.0.0.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet 10.0.0.11/24 scope global secondary eth0
       valid_lft forever preferred_lft forever
    inet 10.0.0.12/24 scope global secondary eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::da50:51f5:4f61:1c0e/64 scope link tentative noprefixroute dadfailed 
       valid_lft forever preferred_lft forever
    inet6 fe80::36c4:657d:1a01:aa11/64 scope link tentative noprefixroute dadfailed 
       valid_lft forever preferred_lft forever
    inet6 fe80::2598:d9f2:e9e8:7810/64 scope link tentative noprefixroute dadfailed 
       valid_lft forever preferred_lft forever

# 编写基于ip访问的配置文件
[root@web01 conf.d]# cat 7.conf 11.conf 12.conf
server{
        listen 80;
        server_name 10.0.0.7;
        root /7;
        index index.html;
}
server{
        listen 80;
        server_name 10.0.0.11;
        root /11;
        index index.html;
}
server{
        listen 80;
        server_name 10.0.0.12;
        root /12;
        index index.html;
}

# 检测nginx语法
[root@web01 conf.d]# nginx -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]# mkdir /7
[root@web01 conf.d]# mkdir /11
[root@web01 conf.d]# mkdir /12
[root@web01 ~]# ll /
total 20
drwxr-xr-x    2 root root   24 May 23 10:11 11
drwxr-xr-x    2 root root   24 May 23 10:12 12
drwxr-xr-x    2 root root   24 May 23 10:10 7

# 准备三个索引文件
[root@web01 conf.d]# echo 7 > /7/index.html
[root@web01 conf.d]# echo 11 > /11/index.html
[root@web01 conf.d]# echo 12 > /12/index.html

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

# 浏览器访问
10.0.0.7
10.0.0.11
10.0.0.12

在这里插入图片描述

2——基于多端口的配置方式
#编辑配置文件后查看
[root@web01 conf.d]# cat 7.conf 11.conf 12.conf
server{
        listen 80;
        server_name 10.0.0.7;
        root /7;
        index index.html;
}
server{
        listen 90;
        server_name 10.0.0.7;
        root /11;
        index index.html;
}
server{
        listen 8090;
        server_name 10.0.0.7;
        root /12;
        index index.html;
}

# 检测语法
nginx -t

# 重启nginx
systemctl restart nginx

# 检测端口
[root@web01 conf.d]# netstat -lntup | grep 80
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN
20935/nginx: master
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
20935/nginx: master
[root@web01 conf.d]# netstat -lntup | grep 90
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN
9028/php-fpm: maste
tcp 0 0 0.0.0.0:90 0.0.0.0:* LISTEN
20935/nginx: master
[root@web01 conf.d]# netstat -lntup | grep 8080
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN
20935/nginx: master

# 修改索引文件
[root@web01 conf.d]# echo 90 > /11/index.html
[root@web01 conf.d]# echo 8080 > /12/index.html

# 浏览器访问
10.0.0.7
10.0.0.7:90
10.0.0.7:8080


# 注意点启动的端口范围1-65535
# 注意点 启动端口不要和本地现在启动的端口冲突

在这里插入图片描述

3——基于多域名
#编辑配置文件后查看
[root@web01 conf.d]# cat 7.conf 11.conf 12.conf
server{
        listen 80;
        server_name 1.hh.com;
        root /7;
        index index.html;
}
server{
        listen 80;
        server_name 2.hh.com;
        root /11;
        index index.html;
}
server{
        listen 80;
        server_name 3.hh.com;
        root /12;
        index index.html;
}

# 检测nginx语法
nginx -t

# 重启nginx
systemctl restart nginx

# 本地DNS解析
10.0.0.7 1.hh.com 2.hh.com 3.hh.com

在这里插入图片描述

nginx模块


nginx 目录索引模块
# 先准备nginx网页配置
[root@web01 conf.d]# vim /etc/nginx/conf.d/test.conf
server{
listen 80;
server_name 10.0.0.7;
root /test;
index index.html;
}
[root@web01 conf.d]# ll
total 28
-rw-r--r-- 1 root root  297 May 23 15:57 10.wp.conf
-rw-r--r-- 1 root root  103 May 23 10:44 11.conf
-rw-r--r-- 1 root root  103 May 23 10:43 12.conf
-rw-r--r-- 1 root root  116 May 22 12:48 1.conf
-rw-r--r-- 1 root root  102 May 23 10:44 7.conf
-rw-r--r-- 1 root root 1072 Apr 24 02:24 default.conf
-rw-r--r-- 1 root root  350 May 23 15:20 test.conf

# 创建站点目录
mkdir /test

# 准备索引文件
[root@web01 conf.d]# echo test > /test/index.html
[root@web01 conf.d]# cat /test/index.html
test

# 检测nginx语法
nginx -t

# 重启nginx
systemctl restart nginx

# 浏览器访问
10.0.0.7

在这里插入图片描述

配置目录索引模块 autoindex

  • 当 ngx_http_index_module 模块找不到索引文件时,通常会将请求传递给 ngx_http_autoindex_module 模块。
Syntax: autoindex on | off;
Default:
autoindex off;
Context: http, server, location

# 修改配置文件 加上了autoindex模块
server{
listen 80;
    server_name 10.0.0.7;
    location / {
        root /test;
        index index.html;
        autoindex on;
    }
}

# 检查语法
nginx -t

# 重启nginx
systemctl restart nginx
	
# 找不到索引文件
# 在你的站点目录下不能有index.html

#模拟yum仓库加入bash和epel
[root@web01 ~]# ll /test
total 4
drwxr-xr-x 2 root root 6 May 23 11:52 bash
drwxr-xr-x 2 root root 6 May 23 11:52 epel

在这里插入图片描述

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

off 显示文件的大概大小
on 显示文件的具体大小

# 编辑配置文件
server{
    listen 80;
    server_name 10.0.0.7;
    location / {
        root /test;
        index index.html;
        autoindex on;
        autoindex_exact_size on | off; # 选择on或者off  以人类可读显示大小的是off,否则是on
    }
}

在这里插入图片描述

页面显示格式 autoindex_format…
Syntax: autoindex_format html | xml | json | jsonp;
Default:
autoindex_format html;
Context: http, server, location

# 提供了html格式 xml格式 json格式 jsonp格式
	
# 修改配置文件
## xml
server{
listen 80;
server_name 10.0.0.7;
    location / {
        root /test;
        index index.html;
        autoindex on;
        autoindex_exact_size on;
        autoindex_format xml;
    }
}

# 检测语法
nginx -t

# 重启nginx
systemctl restart nginx

# 访问页面
10.0.0.7

在这里插入图片描述

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

on 现实的是找点目录下文件的属性书剑
off 显示的是格林威治时间

# 编辑配置文件
server{
    listen 80;
    server_name 10.0.0.7;
    location / {
        root /test;
        index index.html;
        autoindex on;
        autoindex_exact_size on;
        autoindex_format html;
        autoindex_localtime on | off;
    }
}

# 检测语法
nginx -t

# 重启nginx
systemctl restart nginx

# 访问浏览器
10.0.0.7

在这里插入图片描述

配置nginx状态模块
server{
    listen 80;
    server_name 10.0.0.7;
    location / {
        root /test;
        index index.html;
        autoindex on;
        autoindex_exact_size on;
        autoindex_format html;
        autoindex_localtime on;
    }
    location = /aaa {
        stub_status;
    }
}

# nginx检测语法
nginx -t

# 重启nginx
systemctl restart nginx

# 访问
10.0.0.7/aaa

在这里插入图片描述

Active connections: 2 # 当前活动的连接数
accepts # 当前总的连接数 tcp
handled # 成功的连接数数 4
requests # 总的http的请求书数目
4 4 51
Reading: 0 # 请求
Writing: 1 # 响应
Waiting: 1 # 等待的请求数
一次tcp请求里面 可以发起多次http的请求
keepalive_timeout 0; 关闭了长连接
keepalive_timeout 65; 65s内网页没有收到请求书就断开tcp连接
应用1:www用户统一化管理nginx和php
# 安装nginx和php
yum localinstall -y *.rpm  ## yum install -y nginx php-fmp php-mysql

# 安装mariadb
yum install -y mariadb-server
# 编辑WeCenter_3-2-1配置文件
server {
    listen 80;
    server_name wc.com;
    root /code/WeCenter_3-2-1;
    location / {
    	index index.php index.html;
    }
    location ~ \.php$ {
    	fastcgi_pass 127.0.0.1:9000;
    	fastcgi_param SCRIPT_FILENAME
    	$document_root$fastcgi_script_name;
    	include fastcgi_params;
    }
}

# 准备网站代码
cd /code
wget http://test.driverzeng.com/Nginx_Code/WeCenter_3-2-1.zip
tar xf WeCenter_3-2-1.zip

# 重启nginx 和 php
systemctl restart nginx php-fpm

# 启动mariadb
systemctl start mariadb

#⭐⭐⭐⭐⭐⭐⭐修改权限(如果报403错误,权限不足可能就是这里出问题 一定要-R,里面文件php编译的)
chown -R apache.apache WeCenter_3-2-1

# 确认端口
80
9000
3306

# 本地dns解析
10.0.0.7 wc.com


打开网页测试可以打开

#添加用户组
groupadd www -g 666

#添加用户
useradd  www -u 666  -g 666 -M -s /sbin/nologin

#修改nginx和php-fpm配置文件 user改为www
[root@web01 ~]# vim /etc/nginx/nginx.conf

user  www;  ⭐⭐⭐⭐⭐⭐⭐⭐
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    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;
    
    
    
[root@web01 ~]# vim /etc/php-fpm.d/www.conf 
; Start a new pool named 'www'.
[www]

; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache Choosed to be able to access some dir as httpd
user = www ⭐⭐⭐⭐⭐⭐⭐⭐
; RPM: Keep a group allowed to write in log dir.
group = www  ⭐⭐⭐⭐⭐⭐⭐

; The address on which to accept FastCGI requests.
; Valid syntaxes are:
;   'ip.add.re.ss:port'    - to listen on a TCP socket to a specific IPv4 address on
;                            a specific port;
;   '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on
;                            a specific port;
;   'port'                 - to listen on a TCP socket to all addresses
;                            (IPv6 and IPv4-mapped) on a specific port;
;   '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
listen = 127.0.0.1:9000

; Set listen(2) backlog.
; Default Value: 511 (-1 on FreeBSD and OpenBSD)
;listen.backlog = 511
    
    

#再修改权限
chown -R www.www WeCenter_3-2-1

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值