Nginx详细配置

nginx安装在IP为x.x.x.x的服务器上

nginx安装

第一步,查看是否安装编译工具及库文件openssl

命令:rpm -q openssl

yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel

openssl  version

第二步,安装PCRE。(目的是让Nginx支持Rewrite 功能)

# 下载PCRE安装包

命令:cd /usr/local/src/

wget Download pcre-8.35.tar.gz (PCRE)

# 解压PCRE安装包

命令:tar zxvf pcre-8.35.tar.gz

# 编译安装PCRE

命令:cd pcre-8.35

./configure

make

make install

# 查看PCRE版本

命令:pcre-config --version

第三步,安装nginx。

# 下载Nginx安装包

命令:cd /usr/local/src/

wget http://nginx.org/download/nginx-1.18.0.tar.gz

# 解压Nginx安装包

命令:tar zxvf nginx-1.18.0.tar.gz

# 编译安装Nginx

命令:cd nginx-1.18.0

(--with-http_stub_status_module可以用来启用Nginx的NginxStatus功能,以监控Nginx的运行状态。可以通过./configure --help选项查看更多模块的情况。)

./configure \

--prefix=/usr/local/nginx \

--sbin-path=/usr/sbin/nginx \

--conf-path=/etc/nginx/nginx.conf \

--error-log-path=/var/log/nginx/error.log \

--http-log-path=/var/log/nginx/access.log \

--pid-path=/var/run/nginx.pid \

--lock-path=/var/run/nginx.lock \

--http-client-body-temp-path=/var/tmp/nginx/client \

--http-proxy-temp-path=/var/tmp/nginx/proxy \

--http-fastcgi-temp-path=/var/tmp/nginx/fcgi \

--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \

--http-scgi-temp-path=/var/tmp/nginx/scgi \

--with-pcre \

--with-http_v2_module \

--with-http_ssl_module \

--with-http_realip_module \

--with-http_addition_module \

--with-http_sub_module \

--with-http_dav_module \

--with-http_flv_module \

--with-http_mp4_module \

--with-http_gunzip_module \

--with-http_gzip_static_module \

--with-http_random_index_module \

--with-http_secure_link_module \

--with-http_stub_status_module \

--with-http_auth_request_module \

--with-mail \

--with-mail_ssl_module \

--with-file-aio \

--with-http_v2_module \

--with-threads \

--with-stream \

--with-stream_ssl_module \

--with-ipv6

make

make install

# 查看nginx版本

命令:/usr/sbin/nginx -v

或    /usr/sbin/nginx -V

若结果显示“nginx version: nginx-1.18.0”,则nginx安装完成。

Nginx常用功能

Http反向代理

Nginx在做反向代理时,提供性能稳定,并且能够提供配置灵活的转发功能。Nginx可以根据不同的正则匹配,采取不同的转发策略。若被分发的服务器存在异常,则可以将请求重新转发给另外一台服务器,然后自动去除异常服务器。

负载均衡

利用nginx与tomcat集群,通过增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器。

Nginx提供的负载均衡策略有2种:内置策略和扩展策略。内置策略为轮询,加权轮询,ip hash。扩展策略,就可以任意选择,可以参照所有的负载均衡算法来一一做下实现。

动静分离

为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。

将静态资源 css、html和js等和动态资源(jsp和servlet)进行分开部署,可以将静态资源直接部署在专门的服务器上,也可以直接放在反向代理服务器上Nginx所在在的服务器上,然后动态资源还是部署在服务器上,如tomcat。然后请求来的时候,静态资源从专门的静态资源服务器获取,动态资源还是转发到后端服务器上。Nginx处理静态页面,Tomcat处理动态页面。

Nginx的配置文件结构

配置文件nginx.conf路径为/etc/nginx/nginx.conf。

nginx.conf由多个块组成,最外面的块是main(全局设置),main包含events和http,http包含upstream(负载均衡服务器设置)和多个server(主机设置),server包含多个location(URL匹配特定位置的设置)。

main块设置的指令将影响其他所有设置;

server块的指令主要用于指定主机和端口;

upstream指令主要用于负载均衡,设置一系列的后端服务器;

location块用于匹配网页位置。

这四者之间的关系式:server继承main,location继承server,upstream既不会继承其他设置,也不会被继承。

在这四个部分当中,每个部分都包含若干指令,这些指令主要包含Nginx的主模块指令、事件模块指令、http核心模块指令,同时每个部分还可以使用其他http模块指令,例如http SSL模块、HttpGzip Static模块和Http Addition模块等。

nginx配置

第一步,创建 Nginx 运行使用的用户nginx。

命令:useradd -s /sbin/nologin -M nginx

( Nginx 服务的默认用户是 nobody ,为了安全更改为 nginx,在配置文件中启用user nginx nginx;)

第二步,默认网站。

当配置文件nginx.conf中有且只有⼀个server时,该server就被Nginx认为是默认⽹站,所有发给Nginx服务器80端⼝的数据都会默认给该server。

nginx.conf中的server内容如下:

server {

      listen 80;

      server_name localhost;

      location / {

           root html;

           index index.html index.htm;

      }

      error_page 500 502 503 504 /50x.html;

      location = /50x.html {

           root html;

      }

 }

第三步,配置nginx.conf文件—nginx访问控制授权。

1)nginx的访问控制需要通过模块来设定,默认提供了2个模块:access和auth_basic。access是基于地址来做限制的,而auth_basic是基于http页面来做限制的。

基于access模块认证:

location /{

    deny 8.142.176.20;

    allow 8.142.214.238;

    allow 120.55.72.8;

    deny all;

}

基于auth_basic模块认证:

location /{

    auth_basic "closed site";  #表示启动了auth认证auth_name的值为closed site

    auth_basic_user_file /etc/nginx/htpasswd;  #用户认证的文件所在的地方

}

2)基于auth_basic模块认证方式

# 下载软件包

命令:yum install httpd-tools -y

# 执行htpasswd,输入密码后生成密码文件nginx.passwd

命令:htpasswd -c -m /usr/local/nginx/nginx.passwd localhost

# 修改密码文件权限

命令:chmod 400 /usr/local/nginx/nginx.passwd

3)编辑nginx.conf文件,加入下面代码:

location /test.html {

    # deny 8.142.176.20;

    # allow all;

    root html;

    auth_basic "secret";

    auth_basic_user_file  /usr/local/nginx/nginx.passwd;

    index  index.html index.htm;

}

4)重新启动nginx,若在浏览器中输入localhost/test.html,网页会弹出需要输入用户和密码的信息,则证明nginx访问控制授权成功。

第四步,配置nginx.conf文件—nginx页面索引文件的指定。

1)apache在配置主机的时候,当访问的目录页面不存在时,可以使用Options Indexes以索引的列表方式显示,nginx也提供了同样的功能,需要通过autoindex模块来实现。实现的方法比较简单:

location / {

    autoindex on;

    autoindex_exact_size on;  #这个选项指定以列表的方式显示的时候,精确地匹配文件的大小,否则会做文件大小转换

    autoindex_localtime on;   #显示文件的显示时间是以运行nginx的服务器的系统时间为标准来显示的

}

2)编辑nginx.conf文件,加入下面代码:

location /index.html {

    index  index.html;

    root html;

    autoindex on;

    autoindex_exact_size on;

    autoindex_localtime on;

}

3)重新启动nginx,若在浏览器中输入localhost/index.html,网页会显示nginx的欢迎界面,则证明成功指定nginx的页面索引文件。

第五步,配置nginx.conf文件—nginx自定义响应报文。

1)nginx自定义响应报文需要通过headers这个模块来实现,而且最好添加http协议所支持的响应报文首部。使用的方法很简单:add_header Cache_Control private; //自定义Cache_Control的值为private

2)可以为一个页面自定义一个响应报文配置如下:

location /test.html {

    add_header Content-Type 'text/html;charset=utf-8';

    return 200 'return  Code=600002  &  return  Message=System Maintaining(8:50-9:40),try it later!';

}

3)重新启动nginx,打开localhost/index.html,发现网页显示“return Code=600002 & return Message=System Maintaining(8:50-9:40),try it later!”,则nginx自定义响应报文配置成功。

第六步,配置nginx.conf文件—nginx的status功能。

1)apache通过“mod_status”模块可以查看服务器的运行状况,nginx提供了类似的功能,通过“http_stub_status_module”模块来完成。nginx启动status比较简单,但是前提是在编译的时候要安装“http_stub_status_module”模块。

2)要启动nginx的status模块,编辑nginx.conf文件,加入下面代码:

location /status {

    stub_status on;

    allow 8.142.214.238;

    deny 8.142.217.4;

    access_log off;

}

3)重新启动nginx,若访问localhots/status,网页显示下面的内容:

Active connections: 2

server accepts handled requests

2 2 1

Reading: 0 Writing: 1 Waiting: 1

则证明nginx的status配置成功。

第七步,日志管理。

1)Nginx访问日志主要有两个参数控制:log_format和access_log。

2)log_format格式变量:

 $remote_addr #记录访问网站的客户端地址

 $remote_user #远程客户端用户名

 $time_local #记录访问时间与时区

 $request #用户的http请求起始行信息

 $status #http状态码,记录请求返回的状态码,例如:200、301、404等。

 $body_bytes_sent #服务器发送给客户端的响应body字节数

 $http_referer #记录此次请求是从哪个连接访问过来的,可以根据该参数进行防盗链设置。

 $http_user_agent #记录客户端访问信息,例如:浏览器、手机客户端等。

 $http_x_forwarded_for #当前端有代理服务器时,设置web节点记录客户端地址的配置,此参数生效的前提是代理服务器也要进行相关的x_forwarded_for设置。

第八步,防盗链。

1)root与alias区别与访问路径:

alias:实际访问文件路径不会拼接URL中的路径。

location ^~ /sta/ {

     alias /usr/local/nginx/html/static/;

}

请求:http://test.com/sta/sta1.html

实际访问:/usr/local/nginx/html/static/sta1.html

root:实际访问文件路径会拼接URL中的路径。

location ^~ /tea/ {

     root /usr/local/nginx/html/;

}

请求:http://test.com/tea/tea1.html

实际访问:/usr/local/nginx/html/tea/tea1.html

2)只有授权和允许的用户才能访问此网站。编辑nginx.conf文件,加入下面代码:

location /images/ {    #匹配image路径

     alias /data/images/;

     valid_referers none blocked *.ayitula.com;  #设置条件

     if ($invalid_referer) {   #不满足referer

        rewrite ^/ http://www.ayitula.com/daolian.gif;

        #return 403;

     }

}

第九步,反向代理。

1)Nginx作为代理服务器,客户机在发送请求时,不会直接发送给目的主机,而是先发送给Nginx,代理服务接受客户机请求之后,再向主机发出,并接收目的主机返回的数据,存放在Nginx的硬盘中,再发送给客户机。代用户上网访问是正向代理,代服务器访问是反向代理。

2)编辑nginx.conf文件,加入下面代码:

location / {

        index index.php index.html index.htm; #定义首页索引文件的名称

        proxy_pass http://mysvr ; #请求转向mysvr 定义的服务器列表

        proxy_set_header Host $host; #优化请求头,可以不加,提高性能的,记得去掉注释文字

        proxy_set_header X-Real-IP $remote_addr;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        client_max_body_size 10m; #允许客户端请求的最大单文件字节数

        client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数,

        proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)

        proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)

        proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)

        proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小

        proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置

        proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)

        proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传

}

简约版:

location / {

     proxy_pass http://192.168.1.2:4000; #代理服务器

}

第十步,负载均衡。

Nginx提供了几种分配方式(策略):

1)轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。

2)weight

weight代表权,重默认为 1,权重越高被分配的客户端越多指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

3)ip_hash

每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。

4)fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

第十一步,动静分离。

 1)Nginx处理静态页面,Tomcat处理动态页面。动静分离从目前实现角度来讲大致分为两种,一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;另外一种方法就是动态跟静态文件混合在一起发布,通过 nginx 来分开。

2)通过location指定不同的后缀名实现不同的请求转发。通过expires参数设置,可以使浏览器缓存过期时间,减少与服务器之前的请求和流量。此种方法非常适合不经常变动的资源。

3)编辑nginx.conf文件,加入下面代码:

location /www {

         root /httpsweb;

         index index.html;

}

location /test {

         root /httpsweb;

         autoindex on;

}

4)检查nginx.conf配置是否正确,然后测试动静分离是否成功。然后删除后端tomcat服务器上的某个静态文件,查看能否访问。若可以访问,则说明nginx直接返回静态资源,不走后端tomcat服务器。

第十二步,配置nginx.conf文件—nginx的URL重写功能。

1)nginx的URL重写功能是依靠ngx_http_rewrite_module这个模块来实现的。有5个nginx常用的rewrite语法:

①set:用来设置变量;

②if:用来判断一些在rewrite语句中无法直接匹配的条件,比如检测文件存在与否,http header,cookie等;

③return:可用来直接设置HTTP返回状态,比如403,404等;

④break:立即停止rewrite检测;

⑤rewrite:设置url重写,其语法使用格式为“rewrite 正则 替换 标志位”。如rewrite ^/(.) http://8.142.214.238:9004/$1 parmanent;

说明:正则^/(.)表示匹配所有的请求,匹配成功后,跳转到后面指定的url地址;$1是取出前面正则表达式分组括号里的内容;parmanent表示301重定向的标记。

2)rewrite的重写功能和apache基本上是一样,有4个默认使用的rewrite标志位:

①break:停止rewrite检测,当含有“break flag”的rewrite语句被执行时,该语句就是rewrite的最终结果;

②last:停止rewrite检测,但是跟break有本质的不同,last的语句不一定是最终结果;

③redirect:返回302临时重定向,一般用于重定向到完整的URL(包含http:部分);

④permanent:返回301永久重定向,一般用于重定向到完整的URL(包含http:部分)。

注意:last和break用于实现url重写,浏览器的地址栏不会发生变化;redirect和permanent也是用于url跳转,浏览器url地址栏发生变化,跳转到新的url地址栏。

3)if语句中的判断条件:

正则表达式匹配:~ 为区分大小写匹配;~* 为不区分大小写匹配;

!~和!~*分别为区分大小写不匹配及不区分大小写不匹配。

4)文件及目录匹配:

-f和!-f用来判断是否存在文件;-d和!-d用来判断是否存在目录;

-e和!-e用来判断是否存在文件或目录;-x和!-x用来判断文件是否可执行。

5)编辑nginx.conf文件,加入下面代码:

location /test.html {

     rewrite ^/(.) http://wwww.taobao.com/ redirect;

}

6)重新启动nginx,若在浏览器中输入localhost/index.html,网页跳转到淘宝的登录界面,则证明URL重写成功。

第十三步,配置nginx.conf文件—nginx的SSL功能。

1)nginx支持SSL功能,需要在编译时指定--with-http_ssl_module选项。nginx的SSL功能就是依靠“ngx_http_ssl_module”模块来完成的。

2)要完成对SSL的支持,就需要生成证书。

3)创建ssl密钥目录

命令:mkdir -p /etc/nginx/ssl_key

4)创建私钥

命令:cd /etc/nginx/ssl_key/

openssl genrsa -idea -out server.key 2048

openssl req -days 3650 -x509 -sha256 -nodes -newkey rsa:2048 -keyout server.key -out server.crt

5)配置https网站

新建/etc/nginx/conf.d/https.conf文件,在文件中写入下面代码:

server {

        listen 443 ssl;

        server_name https.benet.com;

        ssl_certificate ssl_key/server.crt;

        ssl_certificate_key ssl_key/server.key;

        location / {

                root /httpsweb;

                index index.html;

        }

}

然后新建文件夹/usr/local/nginx/httpsweb,并在文件夹中生成index.html。

命令:echo "

https.benet.com

" > /usr/local/nginx/httpsweb/index.html

最后重启nginx服务,在浏览器中使用https://https.benet.com访问测试,出现对应网页页面,则nginx的SSL功能配置成功。

优化

第一步,并发优化。

nginx.conf优化后的内容如下:

user nginx nginx;  #用户名设置为刚刚创建的用户名

(user root; #配置用户或者组,默认为nobody nobody)

worker_processes  4; #允许生成的进程数,默认为1

worker_cpu_affinity 0001 0010 0100 1000;

第二步,长连接。

nginx.conf优化后的内容如下:

#keepalive_timeout  0; #0代表关闭

keepalive_timeout  300s; #连接超时时间,默认为75s,可以在http,server,location块。

#keepalive_requests 8192; #每个⻓连接接受最⼤请求数

第三步,配置nginx.conf文件—nginx的压缩功能。

1)nginx的gzio模块可以启动压缩功能,在访问量高、带宽不大的情况下,可以显著提高服务器的性能。gzip是通过“with-http_gzip_static_module”模块来完成工作的。在编译的时候需要安装“http_gzip_static_module”模块。

2)gzip的常用命令如下:

gzip on; #开启或者关闭gzip模块

gzip_buffers: 4 4k; #设置系统获取几个单位的缓存,用于存储gzip的压缩结果数据流。例如4 4k 代表以4k为单位,按照原始数据大小以4k为单位的4倍申请内存。如果没有设置默认值,则申请跟原始数据相同大小的内存空间去存储gzip压缩结果。

gzip_comp_level 4; #gzip压缩比,1压缩比最小,处理速度最快;9压缩比最大,处理速度最慢,传输快但比较消耗CPU。

gzip_min_length 1024; #设置允许压缩的页面最小字节数,页面字节数从header头中的Content-Length中进行获取。默认值是0,不管页面多大都压缩。建议设置成大于1k的字节数,小于1k可能会越压越大。

gzip_proxied off; #nginx作为反向代理的时候,开启或者关闭后端服务器,返回的结果匹配的前提是后端服务器必须要返回包含"Via"的header头。默认的取值有off、expired、no-cache、no-store、private、no_last_modified、no_etag、auth和any。

3)具体解释如下:

off ——关闭所有的代理结果数据的压缩;

expired ——启用压缩,如果header头中包含"Expires"头信息;no-cache ——启用压缩,如果header头中包含"Cache-Control:no-cache"头信息;

no-store ——启用压缩,如果header头中包含"Cache-Control:no-store"头信息;

private ——启用压缩,如果header头中包含"Cache-Control:private"头信息;

no_last_modified ——启用压缩,如果header头中不包含"Last-Modified"头信息;

no_etag ——启用压缩,如果header头中不包含"ETag"头信息;auth -启用压缩,如果header头中包含"Authorization"头信息;

any ——无条件启用压缩。

4)gzip_types匹配mime类型进行压缩,无论是否指定"text/html"类型总是会被压缩的。nginx.conf优化后的内容如下:

gzip  on; #开启gzip压缩功能

gzip_min_length  1k;

gzip_buffers     8 128k;

gzip_http_version 1.1;

gzip_comp_level 2;

gzip_types  text/plain text/css application/x-javascript image/bmp application/javascript;

gzip_disable msie6;

gzip_vary on;

第四步,配置文件nginx.conf最终成果介绍。

nginx.conf路径为/etc/nginx/nginx.conf。nginx.conf内容如下:

user nginx nginx;  #用户名设置为刚刚创建的用户名

(user root; #配置用户或者组,默认为nobody nobody)

worker_processes  4; #nginx进程数,等于CPU内核数,默认为1

worker_cpu_affinity 0001 0010 0100 1000;

error_log  /var/log/nginx/error.log info; #日志位置和级别

pid      /var/run/nginx.pid; #指定nginx进程运行文件存放地址

worker_rlimit_nofile 102400; #最大连接数,默认为512

events {

        use epoll; #事件驱动模型

        worker_connections 102400; #最大连接数,默认为512

        accept_mutex off; #设置网路连接序列化,防止惊群现象发生,默认为on

        multi_accept on; #设置一个进程是否同时接受多个网络连接,默认为off

}

http {

      server_tokens off;

      include  mime.types; #引用mime_types文件。文件扩展名与文件类型映射表。

      default_type  application/octet-stream; #配置用于处理前端请求的MIME类型,默认文件类型,默认为text/plain。

      charset  utf-8; #默认编码

      server_names_hash_bucket_size 128; #服务器名字的hash表大小

      client_header_buffer_size 32k; #上传文件大小限制

      large_client_header_buffers 4 64k; #设定请求缓

      client_max_body_size 300m; #设定请求缓

      client_header_timeout  300s;

      client_body_timeout    300s;

      output_buffers   8 1024k;

      postpone_output  2048;
 
      log_format main escape=json '$remote_addr   $time_iso8601   $status $request_time $http_x_forwarded_for $http_host $request $request_body   $http_referer'; #用来定义记录日志的格式,可以自定义格式。

      access_log  /var/run/access.log  main; #用来指定日志文件的路径及使用的何种日志格式记录日志,combined为日志格式的默认值,access_log off可以关闭访问日志。

      sendfile       on; #允许sendfile方式传输文件,可以实现网页加速,默认为off,可以在http块,server块,location块。

      tcp_nopush     on; # 防止网络阻塞

      tcp_nodelay    on; # 防止网络阻塞

      #keepalive_timeout  0;

      keepalive_timeout  300s; #连接超时时间,默认为75s,可以在http,server,location块。

      send_timeout 300s;

      # proxy相关参数是为了改善网站的性能,减少资源占用,提高访问速度。

      proxy_connect_timeout   60s;

      proxy_read_timeout      60s;

      proxy_send_timeout      60s;

      proxy_buffer_size       1024k;

      proxy_buffers           8 1024k;

      proxy_busy_buffers_size 1024k;

      proxy_temp_file_write_size 1024k;

      proxy_next_upstream error timeout;

      underscores_in_headers on;

      proxy_http_version 1.1;

      proxy_set_header Upgrade $http_upgrade;

      proxy_set_header Connection "upgrade";

      proxy_set_header Host $host;

      proxy_set_header X-Real-IP $remote_addr;

      proxy_set_header X-Real-Port $remote_port;

      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

      gzip  on; #开启gzip压缩功能

      gzip_min_length  1k; #允许压缩的页面的最小字节数。默认是0,不管页面多大都进行压缩。建议设置成大于1k的字节数,小于1k可能会越压越大。

      gzip_buffers     8 128k; #表示申请8个单位为128k的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果。

      gzip_http_version 1.1; #压缩版本

      gzip_comp_level 2; #压缩等级。1压缩比最小,处理速度快。9压缩比最大,比较消耗cpu资源,处理速度最慢,但是因为压缩比最大,所以包最小,传输速度快。

      gzip_types  text/plain text/css application/x-javascript image/bmp application/javascript; #压缩类型,默认就已经包含text/html。

      gzip_disable msie6; 

      gzip_vary on; #选项可以让前端的缓存服务器缓存经过gzip压缩的页面。

      server {

             listen      8900;

             server_name  127.0.0.1;

             charset utf-8;

             client_max_body_size 50M;

             proxy_set_header Host $proxy_host;

             location / {

                      proxy_pass http://127.0.0.1:8000/;

             }

             location /test/ {

                      proxy_pass http://域名/test/;

                      proxy_http_version 1.1;

                      proxy_set_header Upgrade $http_upgrade;

                      proxy_set_header Connection "upgrade";

             }

             location /test2/ {

                      alias /opt/maintain/;

                      index index.html;

                      rewrite ^/(.*)$ https://域名/controller/ permanent;

             }

       }

       upstream api{

               server    x1.x1.x1.x1:8081 weight=3;

               server    x1.x1.x1.x1:8082 weight=2;

               server    x1.x1.x1.x1:8083 weight=1;

       }

       server {

              listen  80;

              server_name 域名;

              location / {

                       proxy_pass http://api;

                       proxy_set_header Host $http_host;

                       proxy_set_header X-Real-IP $remote_addr;

                       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

              }

        }

        server { #虚拟主机的设置

               listen       80; #监听的端口

               server_name  localhost; #域名,当前IP地址

               charset utf-8; #设置字符集

               #access_log  logs/host.access.log  main; #设置访问日志

               location / {

                        root   html; #定义网页文件目录,可以使用绝对路径,不使用绝对路径的时候--prefix的选项作为相对路径

                        index  index.html index.htm; #url的默认访问文件

               }

        }

        server {

               listen  80;

               listen 443 ssl;

               server_name  域名;

               # 配置域名证书

               ssl_certificate   /etc/nginx/cert/域名.pem;

               ssl_certificate_key  /etc/nginx/cert/域名.key;

               ssl_session_timeout 5m;

               ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;

               ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

               ssl_prefer_server_ciphers on;

               location / {

                        proxy_pass http://域名;

                        proxy_set_header Host $http_host;

                        proxy_set_header X-Real-IP $remote_addr;

                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

               }

        }

}

既然看到这里了,就向大家打个广告。如果想要了解更多关于运维和mysql数据库的知识,可以关注我的微信公众号:人文历史与科学技术,下面是二维码,谢谢大家! 

你可能感兴趣的:(2022运维,nginx,tomcat,redis,linux,nginx,运维,服务器)