概述

异步非阻塞的高性能HTTP和反向代理服务器

 

 

nginx的运行架构

 

1、Master进程

 

启动检查nginx.conf是否正确

 

根据配置文件创建、监控worker进程的数量和状态

 

监听socket,接受client发起的请求,然后worker竞争抢夺连接,获胜的worker可以相应请求

 

接收管理员发送的nginx的信号,并将信号通知给worker

 

 

 

 

 

2、Worker进程

 

实际处理client网络请求

 

接受master进程发出的nginx的信号

 

 

 

安装

1、安装nginxyum

 

rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

 

  

 

2、使用yum install nginx

 

 

3、检查nginx安装

默认安装到/etc/nginx目录下

 

 

同时也帮我们在/usr/sbin/nginx 创建环境变量,我们可以直接使用nginx命令

 

 

 

nginx管理命令

1nginx  -help

 

 

2、nginx -V 查看当前nginx安装的模块插件

 

 

3、nginx -v查看nginx的版本

 

 

 

4、nginx -t 检查nginx的配置文件是否合法

 

 

5、nginx -s nginx发送信号 stop quit reopen reload

 

 

 

我们看到执行reload信号,master进程不变,但是worker进程重启了

 

6、重复启动nginx会报错,因为80端口已经被占

 

 

 

7、当然也可以用systemctl命令来操作nginx

 

 

 

 

8、查看Nginx的的rpm包

 

 nginx的配置文件

1、全局配置

 

user  nginx;
worker_processes  auto;

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

 

2、性能配置文件

 

 

3、http请求相关配置

 

 

4、Include语法 导入外部的配置文件,主要使用场景是导入server配置文件

 

 

 

5、默认的网站配置在这里

 

6、server配置,Server标签主要是一个具体某一个网站的请求和响应

 

 

 

7、Loction 用于匹配网站不同的url的路径

 

 

 

可以看下这域名怎么和servername进行匹配

 

 

 

配置虚拟主机

1、基于ip的单虚拟主机

 

HTTP区域中,设置一个server标签即可

 虚拟主机的子配置文件

创建一个配置文件

 

 

配置文件内容

 

创建对应的资源文件

 

此时大家要注意看我的配置文件的中server配置、资源文件路径、和实际的页面请求的url

 

访问测试网页

 

访问测试文本

 

 

 

访问测试图片

 

 

 

测试非文本文件

如果是非文本文件和图片文件,nginx会直接让你下载

 

 

 

查看nginx的访问日志

 

 

 

 

查看nginx的错误日志

 

 

 

 

 

 

基于多端口的虚拟主机

我们做了一个配置

 

出错端口permisson failed

但是我们启动nginx确失败了

 

 

此时我们需要这样解决

 

 

 

 

然后执行

 

 

 

 

 

 

我们在再次启动nginx,可以看到nginx已经启动成功,端口已经正常绑定

 

 

 

 

 

 

测试文本文件

 

测试图片文件

 

 

 

 

测试网页文件

 

 

 

 

 

 测试其他文件

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

基于多ip的虚拟主机

 

1、首先配置多ip

 

 

 

 

 

 

2、配置一个配置文件

 

 

 

 

 

 

 

 

配置文件内容如下

 

 

 

 

 

 

 

 

反向代理实战

 

我们先用django写一个web程序,用来做反向代理测试

 

 

 

 

 并在django中获取源ip地址

 

 

 

 

 

 

 

 

 

 

然后客户端访问下这个django的程序,我们看到程序已经正常返回

 

 

 

 

 

 

查看django打印的客户端地址

 

Starting development server at http://192.168.214.1:8090/


Quit the server with CTRL-BREAK.


REMOTE_ADDR:192.168.214.1


HTTP_X_REAL_IP:该元素存在


[27/Aug/2023 16:28:12] "GET /test/ HTTP/1.1" 200 19


REMOTE_ADDR:192.168.214.10


HTTP_X_REAL_IP:该元素存在


[27/Aug/2023 16:28:20] "GET /test/ HTTP/1.0" 200 19


C:\cosdtplatm\django2\app1\views.py changed, reloading.


Watching for file changes with StatReloader

  

 

REMOTE_ADDR:192.168.214.1   客户端A,不过nginx代理打印出来的ip地址,此时这个地址是真实的客户端的地址,同样我们看到这个地址是空:HTTP_X_REAL_IP

 

REMOTE_ADDR:192.168.214.10  客户端A,过nginx代理打印出来的ip地址,此时这个地址的nginx地址,同样我们看到这个地址是空:HTTP_X_REAL_IP

 

 

 

 

 

下面我们修改下nginx的配置

 

 

 再次访问

Django version 3.2.20, using settings 'django2.settings'
Starting development server at http://192.168.214.1:8090/
Quit the server with CTRL-BREAK.
REMOTE_ADDR:192.168.214.10
HTTP_X_REAL_IP:192.168.214.1

  

 

 

[27/Aug/2023 16:35:56] "GET /test/ HTTP/1.0" 200 19

REMOTE_ADDR:192.168.214.1

HTTP_X_REAL_IP:该元素存在

[27/Aug/2023 16:35:58] "GET /test/ HTTP/1.1" 200 19

 

 

 

 

 

#此时我们拿到了真实的nginx的地址

 

 

 

 

 

负责均衡配置

1、配置文件

 

 

 

 

 

 2、测试负载均衡

分别访问2次,返回的结果不一样,说明负载均衡已经生效

a、nginx返回的的页面

 

b、django返回页面

 

posted on 2023-08-27 17:26  bainianminguo  阅读(102)  评论(0编辑  收藏  举报