Nginx学习教程

Nginx 学习笔记

安装nginx

这里使用Centos8-Stream ,用包管理器安装nginx

[root@localhost ~]# dnf -y install nginx

nginx服务的启停

[root@localhost ~]# nginx  # 回车启动nginx,没有输出为正常
然后打开浏览器,输入localhost,如果能够看到Nginx的Web页面,说明启动成功。

# nginx启动完成后作为一个后台程序执行,查看一下!
[root@localhost ~]# ps -ef | grep nginx

这里只需要关注两个进程,一个master进程,一个work 进程

在这里插入图片描述

Nginx的进程模型

在这里插入图片描述

master 进程是Nginx的主进程 : 负责读取和验证配置文件以及管理Work进程

work进程负责完成具体的工作(work进程的数量可以通过配置文件来调整)

只有一个master 进程,可以有多个work 进程

通过nginx -s [选项]来管理nginx进程

nginx -s quit # 正常程序退出nginx
nginx -s stop # 立即停止nginx
nginx -s reload # 重新加载nginx配置文件 
nginx -s reopen # 重新打开日志文件
nginx  # 启动nginx 

静态站点部署

修改服务启动的默认页面

Nginx -V 查看nginx的详细信息,一般是查看nginx在服务器的配置文件路径

在这里插入图片描述

编辑配置文件,这个就是默认Web页面文件的位置

在这里插入图片描述

进入到该目录

[root@localhost nginx]# ls
html  modules
[root@localhost html]# vim index.html # 修改里面的内容,随便修改即可

在这里插入图片描述

重新载入nginx配置文件

nginx -s reload # 然后刷新页面,可以看到显示了

在这里插入图片描述

搭建一个属于自己的个人博客

我们使用Hexo 搭建一个博客网站,然后部署在nginx里。

在这里插入图片描述

# 提前安装git 和 nodejs
dnf -y install git
dnf -y install nodejs

记得nodejs要版本新一点,如果上述第一条命令错了,那基本上是nodejs 版本不对,需要更新。

# 然后再按照上图方式安装即可。

# ------------------更新nodejs----------------------------
国内安装nvm失败的,可以去看这篇文章:https://blog.youkuaiyun.com/glovenone/article/details/137633632
# 安装 nvm (Node 版本管理器)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash

# 下载并安装 Node.js(可能需要重启终端)
nvm install 22

# 验证环境中是否存在正确的 Node.js 版本
node -v # 应该打印 `v22.12.0`

# 验证环境中是否存在正确的 npm 版本
npm -v # 应该打印 `10.9.0`

在这里插入图片描述

访问成功

在这里插入图片描述

进入博客的目录,执行hexo g

将博客的markdown格式,转换成静态页面,生成在了public 目录下。

实际应用中,我们使用nginx作为Web服务器,只需要将public 目录下的所有文件复制到html目录下即可

在这里插入图片描述

[root@localhost public]# sudo cp -r /blog/public/* /usr/share/nginx/html/

然后再次刷新页面 localhost或者ip地址,可以看到原本nginx的首页变成了博客页面

Nginx的配置文件

在配置文件里测试修改work 进程的数量

[root@localhost html]# vim /etc/nginx/nginx.conf
我这里修改为5个

在这里插入图片描述

保存后,使用nginx -t 检查配置文件是否是正确的。

[root@localhost html]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
重载配置文件
[root@localhost html]# nginx -s reload

[root@localhost html]# ps -ef | grep nginx
root       44488       1  0 22:36 ?        00:00:00 nginx: master process nginx
nginx      44839   44488  0 22:49 ?        00:00:00 nginx: worker process
nginx      44840   44488  0 22:49 ?        00:00:00 nginx: worker process
nginx      44841   44488  0 22:49 ?        00:00:00 nginx: worker process
nginx      44842   44488  0 22:49 ?        00:00:00 nginx: worker process
nginx      44843   44488  0 22:49 ?        00:00:00 nginx: worker process
root       44845    2378  0 22:49 pts/0    00:00:00 grep --color=auto nginx

Tips:

​ 一般来说,这个数量保持和服务器CPU内核数量相同即可。

​ 也可以设置为auto,这样Nginx会自动根据内核的数量来设置work进程的数量

配置文件里修改最频繁的就是http这一模块。

这一块涉及到了反向代理、负载均衡、虚拟主机等

一个Http模块可以包含多个server模块

在这里插入图片描述

反向代理和负载均衡

Nginx是一个非常典型的反向代理的服务器

演示反向代理

使用Go语言从头搭建三个Web服务器

Tips: 这里我们可以使用GPT或者其他AI工具帮我们生成一个简单Go语言的Web源码

先提前在linux 里安装Go

dnf -y install go

package main

import (
	"fmt"
	"net/http"
)

func helloWorldHandler(w http.ResponseWriter, r *http.Request) {
	fmt.Fprint(w, "Hello, World!")
}

func main() {
	http.HandleFunc("/", helloWorldHandler)
	fmt.Println("Starting server on :8080")
	err := http.ListenAndServe(":8080", nil)
	if err != nil {
		fmt.Println("Error starting server:", err)
	}
}
在随便哪一个目录下创建一个文件
[root@localhost nginx-web]# mkdir nginx-web
[root@localhost nginx-web]# cd nginx-web
[root@localhost nginx-web]# touch main.go
-------------------------------------------------------
把上面的粘贴进去
-------------------------------------------------------
复制三份,把里面的内容也各自修改一下,这里以8000为例如图
[root@localhost nginx-web]# ls
main-8000.go  main-8001.go  main-8002.go

在这里插入图片描述

修改nginx改配置文件

添加如下两个

upstream是在http块里添加的

在这里插入图片描述

nginx -t 检查配置文件是否有问题

nginx -s reload

然后克隆三个终端,进入到我们的三个go文件夹目录下,分别在三个终端执行:

go run main-8000.go

go run main-8001.go

go run main-8002.go

然后打开浏览器,输入 IP/app 不停刷新即可看到每次出现的结果不同(默认以轮询的方式代理)

在这里插入图片描述

还可以使用权重来加给某个服务器,让他接受更多的请求

编辑配置文件,加上权重,weight=3,意思他出现的额频率是其他两个的3倍

在这里插入图片描述

另外一个比较常用的策略是ip_hash(解决了一些客户端seesion 的问题)

这个地址会根据客户端的地址进行一个哈希,同一个客户端的请求,就会被分配到同一台服务器上。

修改配置文件

在这里插入图片描述

nginx -t

nginx -s reload

然后刷新浏览器,会发现请求都打在了8000端口

HTTPS配置

主流的云平台皆可以申请到HTTPS证书

如果没有云平台也没有关系

我们可以使用openssl来生成一个自签名认证的HTTPS证书

在这里插入图片描述

# 1.生成私钥文件-private key
openssl genrsa -out private.key 2048

# 2. 根据私钥生成证书签名请求文件。简称 CSR文件
openssl req -new -key private.key -out cert.csr

# 3.使用私钥对证书申请进行签名从而生成证书文件(pem文件)
openssl x509 -req -in cert.csr -out cacert.pem -signkey private.key

然后根据提示输入信息,完成后,会得到下面两个文件,一个是私钥文件,一个是证书文件pem

然后将这两个文件放入 nginx服务器目录下面。也就是/etc/nginx/

在这里插入图片描述

然后编辑nginx配置文件,将证书信息写入进去

在这里插入图片描述

       listen       443 ssl;
        server_name  localhost;
        # 证书文件名称
        ssl_certificate /etc/nginx/cacert.pem;
        #证书私钥文件名称
        ssl_certificate_key /etc/nginx/private.key;
        # 下面这几行配置一般都是固定的
        # ssl 验证配置
        ssl_session_timeout 5m; # 缓存有效期
        # 安全连接可选的加密协议
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
        # 配置加密套件/加密算法
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        # 使用服务端的首选算法
        ssl_prefer_server_ciphers on;
[root@localhost nginx]# nginx -s reload  # 重新加载配置文件
然后使用浏览器访问

在这里插入图片描述

因为我们刚刚生成的证书是自签名的,没有经过CA机构的认证,所以浏览器会提示我们不安全。

点击【高级】继续访问

在这里插入图片描述

然后我们查看一下证书的信息,点击不安全,点击【证书详情就可以看到我们的证书信息】

在这里插入图片描述

还有一般我们会将http的请求重定向到https,只需要在配置文件中加上如下几行命令即可

然后重启 nginx -s reload

    server {
        listen 80;
        server_name test.net www.test.net;
        return 301 https://$server_name$request_uri;
    }

在这里插入图片描述

然后就可以访问成功了!!!

虚拟主机

虚拟主机可以在一台服务器上部署多个站点。

Nginx中的每一个server块都是一个虚拟主机站点。

同时,nginx还提供了一个更加规范化的标准,允许在主配置文件中包含进来外部配置的虚拟主机站点,

而不必将所有的站点都一股脑堆在同一个配置文件中,显得过于臃肿。

例如,将上面的https的配置的server块,剪贴下来,复制到本目录下的conf.d目录下,新建一个配置文件名称。粘贴进去。

然后在nginx.conf主配置文件中,引用该配置文件即可

[root@localhost conf.d]# vim local.conf
# 复制过去
[root@localhost conf.d]# nginx -s reload

# 为啥是conf.d目录,因为我们可以看到主配置文件当中有这样一命令
 include /etc/nginx/conf.d/*.conf;
 这个命令意思是将conf.d目录下.conf 后缀的文件都包括进来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值