4

什么是Nginx?

Nginx是一款轻量级的Web服务器、反向代理服务器,由于它的内存占用少,启动极快,高并发能力强,在互联网项目中广泛应用。

Nginx的作用

反向代理:

后端服务器的响应返回给客户端。在这个过程中,客户端不知道实际提供服务的是哪个服务器,而是与反向代理服务器进行通信。这种方式有助于隐藏后端服务器的真实地址和提高系统的安全性,同时也可以实现负载均衡和缓存等功能。简单来说,反向代理就像是一个“中间人”,帮助客户端和后端服务器进行通信,起到保护和优化的作用。

image.png

正向代理:

向代理是指代理服务器位于客户端和互联网之间,客户端需要通过代理服务器才能访问互联网上的资源。简单来说,正向代理就像是一个“跳板”,客户端通过这个跳板才能够访问到互联网上的各种网站和服务。正向代理服务器接收客户端的请求,然后代替客户端向互联网上的服务器发送请求,最后将服务器的响应返回给客户端。正向代理通常用于隐藏客户端的真实IP地址,绕过网络限制或者提高访问速度等目的。

image.png

联系:

  1. 正向代理中,proxy和client同属一个LAN,对server透明;
  2. 反向代理中,proxy和server同属一个LAN,对client透明。

nginx可以提供的服务

  1. web 服务
  2. 负载均衡(反向代理)
  3. web cache(web 缓存)

nginx下载

windows下安装

http://nginx.org/en/download.html 下载稳定版本。

image.png

启动nginx

直接点击nginx.exe执行,之后会弹出一个黑色的框,出现一瞬间

检查nginx是否启动成功

直接在浏览器输入http://localhost:8080/ 如何出现这个页面证明运行成功

server {    
  listen 8080;    
  server_name yourdomain.com;    
  location / {    
    root   html;   
    index index.html;    
  }    
}    

image.png

mac下载

brew install nginx

image.png

常用的命令

// 查看安装信息
brew info nginx
// 停止 Nginx 服务
nginx  stop
//重启 Nginx 服务
nginx  reload
//检查 Nginx 配置文件语法是否正确
nginx -t
//查看 Nginx 版本:
nginx -v

基本路径

1.网站存放路径
/opt/homebrew/var/www
2.Nginx配置文件路径
/opt/homebrew/etc/nginx/nginx.conf
3.服务配置文件
/opt/homebrew/etc/nginx/servers

image.png

nginx配置文件使用

文件结构

...              #全局块

events {         #events块
   ...
}

http      #http块
{
    ...   #http全局块
    server        #server块
    { 
        ...       #server全局块
        location [PATTERN]   #location块
        {
            ...
        }
        location [PATTERN] 
        {
            ...
        }
    }
    server
    {
    }
    ...     #http全局块
}

1、全局块:这是设置影响整个Nginx服务器的地方。你可以在这里指定运行Nginx服务器的用户组,告诉Nginx进程应该存放在哪里,确定日志记录的位置,指定要包含的其他配置文件,以及决定允许同时运行多少个工作进程等等。

有趣的进程和线程科普文章: https://www.ruanyifeng.com/blog/2013/04/processes_and_threads...

2、events块:这里配置的是影响Nginx服务器与用户之间网络连接的参数。你可以设定每个进程能处理的最大连接数,选择Nginx处理连接请求的事件驱动模型,决定是否允许服务器同时接受多个网络连接,还可以开启多个网络连接的顺序处理等。

3、http块:HTTP块是最重要的部分之一,因为它包含了几乎所有与网站功能相关的设置。在这里你可以嵌套多个服务器配置,配置代理,缓存,日志记录等等。你可以在这里设置文件引用,定义MIME类型,自定义日志记录方式,确定是否使用sendfile来传输文件,设置连接超时时间,以及控制单个连接可以发送的请求数等。

4、server块:每个HTTP块中可以包含多个服务器块。服务器块用来配置虚拟主机的相关参数,比如你可以在这里指定不同域名的服务器配置。

5、location块:位置块用来配置请求的路由以及如何处理各种页面。简单来说,这就是告诉Nginx当收到特定请求时应该去哪里找文件,或者如何处理这个请求。

默认配置

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {    
    #这行配置包含了 mime.types 文件,这个文件定义了 MIME 类型及其对应的文件扩展名。
    include       mime.types;
    #这行配置定义了默认的 MIME 类型。如果无法识别请求文件的类型,Nginx 将会使用这个默认类型
    default_type  application/octet-stream;

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       8080;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
         # 匹配的根目录,只写文件名默认在 /nginx 文件夹下
        # 也可以写成绝对路径 /opt/homebrew/var/www
          root   html;


         # 设置默认首页,按先后顺序匹配首页
         index  index.html index.htm;
        }

        #error_page  404              /404.html;
        # 当报错 500 502 503 504 的时候走这个指定页面
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
 include servers/*;
}

通过查看/opt/homebrew/var/www/index.html内容,发现就是我们访问8080的页面

image.png

更多详细配置可以参考
https://juejin.cn/post/6883355186790662158
https://www.runoob.com/w3cnote/nginx-setup-intro.html

web 服务

以上代码是使用 Nginx 配置的方式来充当 Web 服务器的示例

angular进行开发web程序

// 通过ng run build进行构建
ng run build

image.png

# 新增一个 server
server {
  listen 17322;
  server_name dentistry;
  location / {
    root /Users/kexiaobin/Desktop/code/dentistry/web/dist/web;
    index index.html;
  }
}

通过访问测试http://localhost:17322,如何出现这个页面证明运行成功

image.png

通过这样的配置,Nginx 成为了一个简单的 Web 服务器,可以提供静态文件服务,同时也可以通过不同的配置实现更复杂的功能,比如代理请求。

代理请求

这段代码是一个 Nginx 配置示例,用于设置代理模式

server {
    listen: 8018;
    server_name 127.0.0.1 localhost;

    localhost /api/ {
        proxy_pass http://127.0.0.1:8080/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    localhost / {
        proxy_pass http://127.0.0.1:4200;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    localhost /sockjs-node/ {
      proxy_pass http://127.0.0.1:4200/sockjs-node/;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
    }
}

# proxy_set_header Host $host;
# 这一行设置了代理请求的 Host 头,将其设置为客户端请求的 Host 头,确保在代理请求中保留了原始请求的主机信息。

# proxy_set_header X-Real-IP $remote_addr;
# 这一行将 X-Real-IP 头设置为客户端的真实 IP 地址,这对于跟踪客户端 IP 地址在代理后端服务器日志中非常有用。

# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 这一行设置了 X-Forwarded-For 头,该头用于记录请求的客户端 IP 地址。$proxy_add_x_forwarded_for 会将当前客户端 IP 地址添加到之前的 X-Forwarded-For 头中,以构建一个 IP 地址链,显示请求经过的代理服务器

# proxy_http_version 1.1;
# 这一行设置了代理的 HTTP 版本为 1.1,这通常用于支持一些现代特性,如 HTTP/1.1 的持久连接。

# proxy_set_header Upgrade $http_upgrade;
# 这一行设置了请求头,将客户端请求中的 "Upgrade" 头字段的值传递到后端服务器。这是 WebSocket 连接协议的一部分,允许客户端和服务器进行协议升级,以建立 WebSocket 连接。

启动angular程序

// 通过ng s启动程序
ng s

通过访问测试http://localhost:8018,如何出现这个页面证明运行成功

image.png

通过客户端请求服务端,这是启动的springboot程序

image.png

通过这样的请求,可以在同一个端口上处理多个不同的后端服务,实现反向代理和请求路由等功能。

总结:

这篇文章只讲解了如果使用nginx进行充当web服务,和进行代理请求,更多使用方式待学习,目前这些已经满足了我的当前需求。

更多参考文章

https://ydlclass.com/doc21xnv/java/fourth/1%E3%80%81nginx%E5%...
https://www.runoob.com/w3cnote/nginx-setup-intro.html


kexb
474 声望15 粉丝