Nginx入门

nginx 可以说是家喻户晓,人人必备,本篇文章对其进行入门级详细介绍,配合项目使用,香~

Nginx是什么

  • Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器
  • Nginx可以作为一个HTTP服务器进行网站的发布处理,另外Nginx可以作为反向代理进行负载均衡的实现

Nginx反向代理/正向代理

  • 正向代理是一个位于客户端和目标服务器之间的代理服务器(中间服务器)。为了从目标服务器取得内容,客户端向代理服务器发送一个请求,并且指定目标服务器,之后代理向目标服务器转交并且将获得的内容返回给客户端。正向代理的情况下客户端必须要进行一些特别的设置才能使用
  • 反向代理正好相反。对于客户端来说,反向代理就好像目标服务器。并且客户端不需要进行任何设置。客户端向反向代理发送请求,接着反向代理判断请求走向何处,并将请求转交给客户端,使得这些内容就好似他自己一样,一次客户端并不会感知到反向代理后面的服务,也因此不需要客户端做任何设置,只需要把反向代理服务器当成真正的服务器就好了。

负载均衡

  • 请求到达反向代理服务器(nginx),将请求分发到配置好的各个tomcat上。
  • 如上图所示,客户端的请求经过反向代理服务器,分发到后面的3个web服务器上

nginx配置文件

全局块

  • 从配置文件开始到events块之间的内容,主要会设置一些影响nginx服务器整体运行的配置指令,主要包括配置运行nginx服务器的用户(组),允许生成的worker process数,进程PID存放路径,日志存放路径和类型以及配置文件的引入等。

events块

  • 这部分主要影响nginx服务器与用户的网络连接,常用的设置包括是否开启对多work process下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个word process可以同时支持的最大连接数等。

http块

  • http块还包含两部分,http全局块,server块
  • http全局块配置的指令包括文件引入,MIME-TYPE定义,日志自定义,连接超时时间,单链接请求数上限等。
  • server块和虚拟主机有密切关系,虚拟主机从用户角度看和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。
  • 每个http块可以包含多个server块,而每个server块就相当于一个虚拟主机,而每个server块也分为全局server块,以及可以同时包含多个location块,全局server块:最常见的配置是本虚拟主机的监听配置和本虚拟主机的名称或IP配置。
  • 一个server块可以配置多个location块,这块的主要作用是基于nginx服务器接收到的请求字符串(例如:server_name/uri-string),对虚拟主机名称之外的字符串(例如前面的:/uri-string)进行匹配,对特定的请求进行处理,地址定向,数据缓存和应答控制等功能,还有许多第三方模块的配置也在在这里进行。

配置文件详解

shell 复制代码
# user 指定运行 nginx 的用户和组(第一个参数为用户第二个为组,这里只有用户)
#user  nobody;
# 指定工作进程数(一般设置为CPU核数)
worker_processes  1;   

# 指定错误日志为 logs/ 目录下的 error.log 文件
#error_log  logs/error.log;
# 指定错误日志,并指定写入格式为 notice
#error_log  logs/error.log  notice;
# 指定错误日志,并指定写入格式为 info  
#error_log  logs/error.log  info;

# 指定 pid 文件(存放主进程 pid 号)
#pid        logs/nginx.pid;

# nginx 连接配置模块
events {
    accept_mutex on;   #设置网路连接序列化,防止惊群现象发生,默认为on
    multi_accept on;  #设置一个进程是否同时接受多个网络连接,默认为off
    #use epoll;      #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
    worker_connections  1024; # 指定每个工作进程最大连接数为 1024
}

# http 配置模块
http {
    # 通过 include 加载 mime.types 文件,里面的 types {} 模块将文件扩展名映射到响应的 MIME 类型
    include       mime.types;
    # 定义响应的默认 MIME 类型
    default_type  application/octet-stream;

    # 写入格式 main 的内容格式如下
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    # 指定访问日志和写入格式为 main
    #access_log  logs/access.log  main;

    # 启用或者禁用 sendfile()
    #如果没有开启,nginx需要拷贝到自己手中,在发送给用户
    #如果开启,nginx直接将文件发送给用户,没有拷贝这一步
    sendfile        on;
    # 启用或者禁用使用套接字选项(仅在 sendfile 使用时使用)
    #tcp_nopush     on;

    # 0 值禁用保持活动的客户端连接
    #keepalive_timeout  0;
    # 65 s 超时
    keepalive_timeout  65;

    # 启用或者禁用 gzip
    #gzip  on;

    # 虚拟主机配置模块
    server {
        # 监听 80 端口
        listen       80;
        # 监听域名为 localhost,可以多写,加上空格
        server_name  localhost;
        # 将指定的 charset 添加到 "Content-Type" 响应头字段。如果此charset与source_charset指令中指定的charset不同,则执行转换。
        #charset koi8-r;

        # 指定该虚拟主机的访问日志
        #access_log  logs/host.access.log  main;

        # 将特定的文件或目录重新定位,如 php 文件,image 目录等
        location / {
            # 设置请求的根目录
            root   html;
            # 定义索引,按顺序匹配
            index  index.html index.htm;
        }

        # 定义显示 404 错误的 uri
        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        # location 精准匹配 '/50x.html'
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        # 正则表达式匹配 php 文件
        #location ~ \.php$ {
            # 设置代理服务器的协议和地址,以及应该映射位置的可选URI。作为协议,
            不能代理https协议,如果配置了proxy_pass root就没有用了。该地址可以指定为一个域名或IP地址,以及一个可选端口
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
             # 设置 FastCGI 服务器的地址。地址可以指定为一个域名或 IP 地址,以及一个端口
        #    fastcgi_pass   127.0.0.1:9000;
             # 设置将在以斜杠结尾的URI之后追加的文件名,
        #    fastcgi_index  index.php;
             # 设置一个应该传递给FastCGI服务器的参数。
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
             # 加载 conf/fastcgi_params 文件
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    # ssl 配置,要启用 ssl 模块需要在编译 nginx 时加上 --with-http_ssl_module 参数
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}
  • 上面整体介绍了nginx的配置文件的结构,其实nginx的插件非常多,可以实现的功能也很多,只是我们常用他来代理后台服务

Nginx反向代理配置

  • 这里服务以一个springBoot项目为实例,新建一个springboot项目
  • 这个项目很简单,只有一个get请求的接口,返回一个字符串。(访问 http://localhost:8081/test地址 会返回一个success的字符串)
  • 在nginx配置文件中添加下列配置,意思就是访问/my-test的时候 会被转发到http://localhost:8081/下。
shell 复制代码
  location /my-test {
    proxy_pass http://localhost:8081/;
  }
  • 有兴趣的小伙伴可以自己下载安装一下nginx,亲手自己配置一个反向代理服务器,想必能收获的更多
相关推荐
上趣工作室4 分钟前
vue2在el-dialog打开的时候使该el-dialog中的某个输入框获得焦点方法总结
前端·javascript·vue.js
家里有只小肥猫4 分钟前
el-tree 父节点隐藏
前端·javascript·vue.js
fkalis5 分钟前
【海外SRC漏洞挖掘】谷歌语法发现XSS+Waf Bypass
前端·xss
monkey_meng12 分钟前
【Rust类型驱动开发 Type Driven Development】
开发语言·后端·rust
落落落sss20 分钟前
MQ集群
java·服务器·开发语言·后端·elasticsearch·adb·ruby
大鲤余1 小时前
Rust,删除cargo安装的可执行文件
开发语言·后端·rust
她说彩礼65万1 小时前
Asp.NET Core Mvc中一个视图怎么设置多个强数据类型
后端·asp.net·mvc
陈随易1 小时前
农村程序员-关于小孩教育的思考
前端·后端·程序员
云深时现月1 小时前
jenkins使用cli发行uni-app到h5
前端·uni-app·jenkins
_江南一点雨1 小时前
SpringBoot 3.3.5 试用CRaC,启动速度提升3到10倍
java·spring boot·后端