Nginx配置介绍

举报
黄生 发表于 2022/09/07 08:31:40 2022/09/07
【摘要】 前面说了openresty的安装,它是基于Ngnix的,下面来看一下Nginx的配置。先用 nginx -V 看一下编译配置:nginx version: openresty/1.15.8.1built by gcc 8.5.0 20210514 (Red Hat 8.5.0-13) (GCC)built with OpenSSL 1.1.1k FIPS 25 Mar 2021TLS SN...

前面说了openresty的安装,它是基于Ngnix的,下面来看一下Nginx的配置。
先用 nginx -V 看一下编译配置:

nginx version: openresty/1.15.8.1
built by gcc 8.5.0 20210514 (Red Hat 8.5.0-13) (GCC)
built with OpenSSL 1.1.1k  FIPS 25 Mar 2021
TLS SNI support enabled
configure arguments:
--prefix=/data/thirdtool/openresty/nginx
--with-cc-opt=-O2
--add-module=../ngx_devel_kit-0.3.1rc1
--add-module=../echo-nginx-module-0.61
--add-module=../xss-nginx-module-0.06
--add-module=../ngx_coolkit-0.2
--add-module=../set-misc-nginx-module-0.32
--add-module=../form-input-nginx-module-0.12
--add-module=../encrypted-session-nginx-module-0.08
--add-module=../srcache-nginx-module-0.31
--add-module=../ngx_lua-0.10.15
--add-module=../ngx_lua_upstream-0.07
--add-module=../headers-more-nginx-module-0.33
--add-module=../array-var-nginx-module-0.05
--add-module=../memc-nginx-module-0.19
--add-module=../redis2-nginx-module-0.15
--add-module=../redis-nginx-module-0.3.7
--add-module=../rds-json-nginx-module-0.15
--add-module=../rds-csv-nginx-module-0.09
--add-module=../ngx_stream_lua-0.0.7
--with-ld-opt=-Wl,-rpath,/data/thirdtool/openresty/luajit/lib
--with-stream
--with-stream_ssl_module
--with-stream_ssl_preread_module
--with-http_ssl_module

然后来看一下Nginx的主配置文件nginx.conf,它是可以分为3个部分,CoreModule,EventsModule,HttpCoreModule。
先看CoreModule

user             root; #运行用户
worker_processes auto; #运行的work进程数。这里也可以设定一个具体的数值,即按照虚拟CPU的数量来。

再看EventsModule

events {
    use epoll; #默认值就是这样:IO复用,事件驱动
    worker_connections  65535; #一个worker进程允许的最大连接数
}

再看HttpCoreModule,这部分内容最多

http {
    server_tokens off;
    client_max_body_size 2g;
    include       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"'; #默认日志格式就如此
    sendfile        on; #高效传输文件模式
    keepalive_timeout  65; #长连接

    include vhost/*.conf; #引入配置文件
    limit_req_zone $host$uri zone=one:10m rate=40r/s;
}

其中http里面的include的虚拟主机的conf文件,具体内容是:
第一个

server {
  listen               223 ssl; #添加了ssl参数
  listen               [::]:223 ssl;

  ssl_certificate      /pathto/cert/server.crt;
  ssl_certificate_key  /pathto/cert/server.key;

  ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
  ssl_session_cache    shared:SSL:1m;
  ssl_session_timeout  15m;
  ssl_ciphers  HIGH:!aNULL:!MD5;
  ssl_prefer_server_ciphers  on;

  # gzip
  gzip on;
  gzip_min_length 200;
  gzip_buffers 32 4K;
  gzip_http_version 1.0;
  gzip_comp_level 6;
  gzip_types *;
  gzip_vary on;
  gzip_disable "MSIE [1-6]\.";

  underscores_in_headers on;
  client_max_body_size 2g;

  if ($scheme = "http") {
    return 301 https://$http_host$request_uri;
  }

第二个,与第一个类似,
仅仅是listen的端口变成了443,以及location定义的不同。
这里就是使用端口做了虚拟主机,来隔离业务。另外的2个元素可以来做虚拟主机的是:域名、IP地址。

然后看location指令,它是匹配请求的uri,然后定位到不同的处理。

  location / { # / 可以匹配任意URI,可以看做吸收其他location不能处理的请求的黑洞
    rewrite ^/(.*) $scheme://$http_host/iadmin/$1 permanent;
  }

  location = /iadmin { # = 表示精确匹配。优先级最高
    rewrite ^/(.*) $scheme://$http_host/iadmin/;
  }

  location ^~ /iadmin { # 显式前缀匹配 (区分大小写) ~* 是不区分大小写
    alias /pathto/nginx/conf/www/admin;
    index index.html;
    absolute_redirect off;
    add_header Cache-Control max-age=3600;
  }

  location /iadmin/api/audit {
      proxy_pass http://127.0.0.1:8300/audit;
      add_header Cache-Control no-store;
      proxy_set_header  Host             $host;
      proxy_set_header  Http-Host        $http_host;
      proxy_set_header  X-Real-IP        $remote_addr;
      proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
  }

nginx有反向代理的功能。正向代理是代理客户端,反向代理是代理服务器。在浏览器或者系统里设置的代理服务器,那个是属于正向代理。反向代理的结果图如下:
image.png

由Nginx代理的后端服务器(backend),这里叫做upstream,也可以理解为上游的服务器。定义在http部分里

upstream loginserver { # 要取一个名字
        server 127.0.0.1:8100;
        server 127.0.0.1:8101;
        server 127.0.0.1:8102; # 没有指定负载均衡策略,就是round robin 加权轮询
}

然后就可以使用upstream里取的名字,用proxy_pass等指令来把客户端的请求按策略转发给后端服务器

  location ^~ /iclient/api/users/auth/ {
    proxy_pass http://loginserver/users/auth/; # 指定代理转发
    add_header Cache-Control no-store;
    proxy_set_header  Host             $host; #转发使用原始请求的host头部
    proxy_set_header  Http-Host        $http_host;
    proxy_set_header  X-Real-IP        $remote_addr;
    proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
  }

最后看一下访问日志的样子:

172.11.61.11 - - [01/Sep/2022:01:23:03 +0000] "GET /iadmin/ HTTP/1.1" 200 427 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.102 Safari/537.36 Edg/104.0.1293.70"
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。