nginx学习笔记

文章目录

一、nginx简介

1、什么是nginx

nginx(“engine x”)是一个高性能得HTTP和反向代理服务器,特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,能经受高负载的考验,有报告表明能支持高达50000个并发连接数。

2、反向代理

(1)正向代理

在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问。

(2)反向代理

我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。

3、负载均衡

单个服务器结局不了,我们增加服务器的数量,然后将请求分发带各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所受的负载均衡。

4、动静分离

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

二、nginx在linux的安装

nginx官网:http://nginx.org/

参考:https://www.runoob.com/linux/nginx-install-setup.html

1、nginx相关压缩包

(1)nginx-1.17.10.tar.gz

(2)pcre-8.35.tar.gz

2、安装编译工具及库文件

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

3、安装PCRE

PCRE的作用是让Nginx支持Rewrite功能。

(1)下载PCRE安装包,下载地址:http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz

或者直接weget,放到如下路径下(/usr/local/src/):

[root@zjy src]# pwd
/usr/local/src

[root@zjy src]# wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz

(2)解压安装包

[root@zjy src]# tar zxvf pcre-8.35.tar.gz
[root@zjy src]# ls
pcre-8.35  pcre-8.35.tar.gz

(3)进入安装包目录

[root@zjy src]# cd pcre-8.35

(4)编译安装

[root@zjy pcre-8.35]# ./configure
[root@zjy pcre-8.35]# make && make install

(5)查看pcre版本

[root@zjy pcre-8.35]# pcre-config --version
8.35

4、安装nginx

(1)下载nginx,下载地址:https://nginx.org/en/download.html

或者直接weget,放到如下路径下(/usr/local/src/):

[root@zjy src]# cd /usr/local/src/
[root@zjy src]# wget http://nginx.org/download/nginx-1.8.1.tar.gz
[root@zjy src]# ls
nginx-1.8.1.tar.gz  pcre-8.35  pcre-8.35.tar.gz

(2)解压安装包并进入安装包目录

[root@zjy src]# tar zxvf nginx-1.8.1.tar.gz
[root@zjy src]# cd nginx-1.8.1/

(3)编译安装

[root@zjy nginx-1.8.1]# ./configure --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/src/pcre-8.35

Configuration summary
  + using PCRE library: /usr/local/src/pcre-8.35
  + using system OpenSSL library
  + md5: using OpenSSL library
  + sha1: using OpenSSL library
  + using system zlib library

  nginx path prefix: "/usr/local/webserver/nginx"
  nginx binary file: "/usr/local/webserver/nginx/sbin/nginx"
  nginx configuration prefix: "/usr/local/webserver/nginx/conf"
  nginx configuration file: "/usr/local/webserver/nginx/conf/nginx.conf"
  nginx pid file: "/usr/local/webserver/nginx/logs/nginx.pid"
  nginx error log file: "/usr/local/webserver/nginx/logs/error.log"
  nginx http access log file: "/usr/local/webserver/nginx/logs/access.log"
  nginx http client request body temporary files: "client_body_temp"
  nginx http proxy temporary files: "proxy_temp"
  nginx http fastcgi temporary files: "fastcgi_temp"
  nginx http uwsgi temporary files: "uwsgi_temp"
  nginx http scgi temporary files: "scgi_temp"
  
[root@zjy nginx-1.8.1]# make
[root@zjy nginx-1.8.1]# make install

(4)查看nginx版本

[root@zjy nginx-1.8.1]# /usr/local/webserver/nginx/sbin/nginx -v
nginx version: nginx/1.8.1

(5)查看nginx配置文件nginx.conf的正确性:

[root@zjy nginx-1.8.1]# cd /usr/local/webserver/nginx/sbin
[root@zjy sbin]# ./nginx -t

(5)启动nginx

[root@zjy nginx-1.8.1]# cd /usr/local/webserver/nginx/sbin
[root@zjy sbin]# ./nginx -c /usr/local/webserver/nginx/conf/nginx.conf

(6)查看进程号

[root@zjy conf]# ps -ef | grep nginx
root      39124      1  0 11:54 ?        00:00:00 nginx: master process ./nginx -c /usr/local/webserver/nginx/conf/nginx.conf
nobody    39125  39124  0 11:54 ?        00:00:00 nginx: worker process
root      39176  38629  0 12:00 pts/1    00:00:00 grep --color=auto nginx

(7)nginx其他命令

[root@zjy nginx-1.8.1]# cd /usr/local/webserver/nginx/sbin
[root@zjy sbin]# ./nginx -s reload            # 重新载入配置文件
[root@zjy sbin]# ./nginx -s reopen            # 重启 Nginx
[root@zjy sbin]# ./nginx -s stop              # 停止 Nginx

(8)对外开放访问的端口

firewall-cmd --zone=public --add-port=80/tcp --permanent
#命令含义:
#–zone #作用域
# –add-port=80/tcp #添加端口,格式为:端口/通讯协议
# –permanent #永久生效,没有此参数重启后失效

(9)重启防火墙

systemctl stop firewalld.service  
systemctl start firewalld.service  

(10)查看已经开放的端口

firewall-cmd --list-all

[root@zjy bin]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources:
  services: dhcpv6-client ssh
  ports: 8080/tcp 3306/tcp 6379/tcp 80/tcp 90/tcp 9090/tcp 2181/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

三、nginx配置文件

1、nginx配置文件位置

路径:/usr/local/webserver/nginx/conf/nginx.conf

[root@zjy conf]# pwd
/usr/local/webserver/nginx/conf
[root@zjy conf]# ll
总用量 60
-rw-r--r--. 1 root root 1034 710 18:26 fastcgi.conf
-rw-r--r--. 1 root root 1034 710 18:26 fastcgi.conf.default
-rw-r--r--. 1 root root  964 710 18:26 fastcgi_params
-rw-r--r--. 1 root root  964 710 18:26 fastcgi_params.default
-rw-r--r--. 1 root root 2837 710 18:26 koi-utf
-rw-r--r--. 1 root root 2223 710 18:26 koi-win
-rw-r--r--. 1 root root 3957 710 18:26 mime.types
-rw-r--r--. 1 root root 3957 710 18:26 mime.types.default
-rw-r--r--. 1 root root 2656 710 18:26 nginx.conf
-rw-r--r--. 1 root root 2656 710 18:26 nginx.conf.default
-rw-r--r--. 1 root root  596 710 18:26 scgi_params
-rw-r--r--. 1 root root  596 710 18:26 scgi_params.default
-rw-r--r--. 1 root root  623 710 18:26 uwsgi_params
-rw-r--r--. 1 root root  623 710 18:26 uwsgi_params.default
-rw-r--r--. 1 root root 3610 710 18:26 win-utf

2、nginx配置文件组成

(1)nginx配置文件有三部分组成

2.1 第一部分:全局块

从配置文件开始到events块之间的内容,主要会设置一些影响nginx服务器整体运行的配置指令。

比如 work_process 1; work_process 值越大,可以支持的并发处理量也越多。

#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;

2.2 第二部分:events块

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

比如work_connections 1024; 支持的最大连接数

events {
    worker_connections  1024;
}

2.3 第三部分:http块

这算是Nginx服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。

注意:http块也可以包括http全局块、server块

2.3.1 http全局块

http全局块配置的指令包括文件引入、MIME-TYPE定义、日志自定义、连接超时时间、单链接请求书上限等。

http {
    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"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
2.3.2 server块

这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。

每个http块可以包括多个server块,而每个server块就相当于一个虚拟主机。

而每个server块也分为全局server块,以及可以同时包含多个location块。

2.3.2.1 全局server块

最常见的配置是本虚拟机主机的名称或IP配置。

server {
	listen       80;
    server_name  localhost;

	#charset koi8-r;

	#access_log  logs/host.access.log  main;
2.3.2.2 location块

一个server块可以配置多个location块。

这块的主要作用是基于Nginx服务器接收到的请求字符串(例如server_name/uri-string),对虚拟主机名称(也可以是IP别名)之外的字符串(例如前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。

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

四、Nginx配置实例-反向代理实例一

1、实现效果

打开浏览器,在浏览器地址栏输入地址www.zjy.com,跳转到linux系统tomcat主页面中。

2、找到nginx配置文件

[root@zjy sbin]# cd /usr/local/webserver/nginx/conf/
[root@zjy conf]# ll
总用量 60
-rw-r--r--. 1 root root 1034 710 18:26 fastcgi.conf
-rw-r--r--. 1 root root 1034 710 18:26 fastcgi.conf.default
-rw-r--r--. 1 root root  964 710 18:26 fastcgi_params
-rw-r--r--. 1 root root  964 710 18:26 fastcgi_params.default
-rw-r--r--. 1 root root 2837 710 18:26 koi-utf
-rw-r--r--. 1 root root 2223 710 18:26 koi-win
-rw-r--r--. 1 root root 3957 710 18:26 mime.types
-rw-r--r--. 1 root root 3957 710 18:26 mime.types.default
-rw-r--r--. 1 root root 2695 711 13:32 nginx.conf
-rw-r--r--. 1 root root 2656 710 18:26 nginx.conf.default
-rw-r--r--. 1 root root  596 710 18:26 scgi_params
-rw-r--r--. 1 root root  596 710 18:26 scgi_params.default
-rw-r--r--. 1 root root  623 710 18:26 uwsgi_params
-rw-r--r--. 1 root root  623 710 18:26 uwsgi_params.default
-rw-r--r--. 1 root root 3610 710 18:26 win-utf

3、修改配置文件

[root@zjy sbin]# vim nginx.conf

server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            proxy_pass http://localhost:8080;
            index  index.html index.htm;
        }


4、修改window的配置文件

路径:C:\Windows\System32\drivers\etc 下的 hosts文件

在最后加一行 192.168.192.129 zjy.com ,然后保存。( ip为虚拟机linux的ip , 用命令 ifconfig 可以查看)

5、最后浏览器用配置的域名访问即可查看

(注意不成功, 可能没有开放远程访问的端口)

五、Nginx配置实例-反向代理实例二

1、实现效果

使用nginx反向代理,根据访问的路径跳转到不同端口的服务中,nginx监听端口为9001,

当访问 http://zhongjinyuan.com:9001/zjytest8080/zjy.html 直接跳转到 http://localhost:8080

当访问 http://zhongjinyuan.com:9001/zjytest9090/zjy.html 直接跳转到 http://localhost:9090

2、原来的 tomcat 的文件夹

[root@zjy apache-tomcat-8.5.50-8080]# pwd
/usr/local/webserver/apache-tomcat-8.5.50-8080

3、复制 tomcat 到另外一个文件夹

[root@zjy webserver]# cp -r /usr/local/webserver/apache-tomcat-8.5.50-8080/* /usr/local/webserver/apache-tomcat-8.5.50-9090
[root@zjy apache-tomcat-8.5.50-8080]# cd ../apache-tomcat-8.5.50-9090
[root@zjy apache-tomcat-8.5.50-9090]# ll
总用量 128
drwxr-x---. 2 root root  4096 712 10:56 bin
-rw-r-----. 1 root root 19318 712 10:56 BUILDING.txt
drwx------. 3 root root   254 712 10:56 conf
-rw-r-----. 1 root root  5408 712 10:56 CONTRIBUTING.md
drwxr-x---. 2 root root  4096 712 10:56 lib
-rw-r-----. 1 root root 57011 712 10:56 LICENSE
drwxr-x---. 2 root root  4096 712 10:56 logs
-rw-r-----. 1 root root  1726 712 10:56 NOTICE
-rw-r-----. 1 root root  3255 712 10:56 README.md
-rw-r-----. 1 root root  7136 712 10:56 RELEASE-NOTES
-rw-r-----. 1 root root 16262 712 10:56 RUNNING.txt
drwxr-x---. 2 root root    30 712 10:56 temp
drwxr-x---. 7 root root    81 712 10:56 webapps
drwxr-x---. 3 root root    22 712 10:56 work

4、修改端口号

修改每个tomcat路径下的server.xml文件中的端口号

[root@zjy conf]# pwd
/usr/local/webserver/apache-tomcat-8.5.50-8080/conf
[root@zjy conf]# ll
总用量 224
drwxr-x---. 3 root root     23 712 10:50 Catalina
-rw-------. 1 root root  13548 712 10:50 catalina.policy
-rw-------. 1 root root   7661 712 10:50 catalina.properties
-rw-------. 1 root root   1338 712 10:50 context.xml
-rw-------. 1 root root   1149 712 10:50 jaspic-providers.xml
-rw-------. 1 root root   2313 712 10:50 jaspic-providers.xsd
-rw-------. 1 root root   3916 712 10:50 logging.properties
-rw-------. 1 root root   7513 712 10:50 server.xml
-rw-------. 1 root root   2164 712 10:50 tomcat-users.xml
-rw-------. 1 root root   2633 712 10:50 tomcat-users.xsd
-rw-------. 1 root root 171482 712 10:50 web.xml
[root@zjy conf]# vim server.xml
<Server port="8005" shutdown="SHUTDOWN">
<Connector port="8080" protocol="HTTP/1.1"
<Connector port="8009" protocol="AJP/1.3" 


##########################################################################################


[root@zjy conf]# pwd
/usr/local/webserver/apache-tomcat-8.5.50-9090/conf
[root@zjy conf]# ll
总用量 224
drwxr-x---. 3 root root     23 712 10:50 Catalina
-rw-------. 1 root root  13548 712 10:50 catalina.policy
-rw-------. 1 root root   7661 712 10:50 catalina.properties
-rw-------. 1 root root   1338 712 10:50 context.xml
-rw-------. 1 root root   1149 712 10:50 jaspic-providers.xml
-rw-------. 1 root root   2313 712 10:50 jaspic-providers.xsd
-rw-------. 1 root root   3916 712 10:50 logging.properties
-rw-------. 1 root root   7513 712 10:50 server.xml
-rw-------. 1 root root   2164 712 10:50 tomcat-users.xml
-rw-------. 1 root root   2633 712 10:50 tomcat-users.xsd
-rw-------. 1 root root 171482 712 10:50 web.xml
[root@zjy conf]# vim server.xml
<Server port="8095" shutdown="SHUTDOWN">
<Connector port="9090" protocol="HTTP/1.1"
<Connector port="8099" protocol="AJP/1.3"

5、配置/etc/profile

在/etc/profile 文件末尾追加:

##########first tomcat###########
export CATALINA_1_BASE=/usr/local/webserver/apache-tomcat-8.5.50-8080
export CATALINA_1_HOME=/usr/local/webserver/apache-tomcat-8.5.50-8080
export TOMCAT_1_HOME=/usr/local/webserver/apache-tomcat-8.5.50-8080
##########first tomcat###########
##########second tomcat##########
export CATALINA_2_BASE=/usr/local/webserver/apache-tomcat-8.5.50-9090
export CATALINA_2_HOME=/usr/local/webserver/apache-tomcat-8.5.50-9090
export TOMCAT_2_HOME=/usr/local/webserver/apache-tomcat-8.5.50-9090
##########second tomcat##########


或者


##########first tomcat###########
CATALINA_1_BASE=/usr/local/webserver/apache-tomcat-8.5.50-8080
CATALINA_1_HOME=/usr/local/webserver/apache-tomcat-8.5.50-8080
TOMCAT_1_HOME=/usr/local/webserver/apache-tomcat-8.5.50-8080
export CATALINA_1_BASE CATALINA_1_HOME TOMCAT_1_HOME
##########first tomcat############
##########second tomcat##########
CATALINA_2_BASE=/usr/local/webserver/apache-tomcat-8.5.50-9090
CATALINA_2_HOME=/usr/local/webserver/apache-tomcat-8.5.50-9090
TOMCAT_2_HOME=/usr/local/webserver/apache-tomcat-8.5.50-9090
export CATALINA_2_BASE CATALINA_2_HOME TOMCAT_2_HOME
##########second tomcat##########

6、让配置文件生效

修改完成后,执行:

[root@zjy etc]# source /etc/profile

7、修改catalina.sh

找到每个路径下的 catalina.sh

[root@zjy etc]# cd /usr/local/webserver/apache-tomcat-8.5.50-8080/bin
[root@zjy bin]# vim catalina.sh

[root@zjy etc]# cd /usr/local/webserver/apache-tomcat-8.5.50-9090/bin
[root@zjy bin]# vim catalina.sh

然后,找到下面红字,

# OS specific support.  $var _must_ be set to either true or false.

# OS specific support.  $var _must_ be set to either true or false.

在下面增加代码:

export CATALINA_BASE=$CATALINA_1_BASE
export CATALINA_HOME=$CATALINA_1_HOME

export CATALINA_BASE=$CATALINA_2_BASE
export CATALINA_HOME=$CATALINA_2_HOME

8、修改nginx配置文件

[root@zjy conf]# pwd
/usr/local/webserver/nginx/conf
[root@zjy conf]# vim nginx.conf
server{
        listen      9001;
        server_name zjy.com;

        location ~ /zjytest8080/ {
           proxy_pass  http://localhost:8080;
        }

        location ~ /zjytest9090/ {
           proxy_pass  http://localhost:9090;
        }

        #location / {
         #   root   html;
         #   proxy_pass http://localhost:9090;
         #   index  index.html index.htm;
       # }
    }

9、Location指令说明

该指令用于匹配URL

语法如下:

location [ = | ~ | ~* | ^~ ] uri {

}

1、= : 用于不含正则表达式的uri前,要求请求字符串与uri严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。

2、~ :用于表示 uri 包含正则表达式,并且区分大小写。

3、~* :用于表示 uri 包含正则表达式,并且不区分大小写

4、^~ :用于不含正则表达式的uri前,要求Nginx服务器找到表示 uri 和请求字符串匹配度最高的location后,立即使用此location处理请求,而不再使用location块中的正则 uri 和请求字符串做匹配。

注意: 如果uri包含正则表达式,则必须要有 ~ 或者 ~* 标识。

六、Nginx配置实例 - 负载均衡

1、实现效果

浏览器地址栏输入地址 http://192.168.192.129:82/fzjhtest/zjy.html , 负载均衡效果,平均 8080 和 9090 端口中。

2、准备工作

(1)准备两台 tomcat 服务器,一台8080,一台9090。

(2)在两台 tomcat 里面webapps目录中,创建名称是 fzjhtest 文件夹, 在 fzjhtest 文件夹中创建 zjytest.html ,用于测试。

3、修改nginx配置文件

	upstream fzjhserver {
        server 192.168.192.129:8080;
        server 192.168.192.129:9090;
    }
	server{
        listen 82;
        server_name 192.168.192.129;

        location /{
            proxy_pass http://fzjhserver;
            root   html;
           index  index.html index.htm;
        }
    }

4、重新加载nginx配置文件

[root@zjy sbin]# pwd
/usr/local/webserver/nginx/sbin
[root@zjy sbin]# ./nginx -s reload

5、浏览器访问

注意:谷歌浏览器 开 无痕模式!!

6、负载均衡的策略

随着互联网信息的爆炸性增长,负载均衡(load balance)已经不再是一个很陌生的话题,顾名思义,负载均衡即是将负载均衡分摊到不同的服务单元,既保证服务的可用性,又保证响应足够快,给用户很好的体验。快速增长的访问量和数据流量催生了各式各样的负载均衡产品,很多专业的负载均衡硬件提供了很好的功能,但却价格不菲,这使得负载均衡软件大受欢迎,nginx就是其中一个,在linux下有Nginx、LVS、Haproxy 等等服务可以提供负载均衡服务,而且Nginx提供了几种分配方式(策略)。

6.1 轮询(默认)

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

6.2 weight

weight 代表权重,默认为1,权重越高被分配的客户端越多。

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。例如:

upstream fzjhserver {
	server 192.168.192.129:8080 weight=10;
	server 192.168.192.129:9090 weight=10;
}

6.3 ip_hash

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

upstream fzjhserver {
	ip_hash;
	server 192.168.192.129:8080;
	server 192.168.192.129:9090;
}

6.4 fair(第三方)

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

upstream fzjhserver {
	ip_hash;
	server 192.168.192.129:8080;
	server 192.168.192.129:9090;
	fair
}

七、Nginx配置实例 - 动静分离

1、什么是动静分离

Nginx动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离。严格意义上说应该是动态请求静态请求分开,可以理解成使用Nginx处理静态页面,tomcat处理动态页面。动静分离从目前实现角度来讲大致分为两种。

一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案

另外一种方法就是动态跟静态文件混合在一起发布,通过Nginx来分开。

通过location指定不同的后缀名实现不同的请求转发。通过 expires 参数设置,可以使浏览器缓存过期时间,减少与服务器之前的请求和流量。具体 Expires 定义:是个一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。此种方法非常适合不经常变动的资源。(如果经常更新的文件,不建议使用 Expires 来缓存),我这里设置 3d ,标识这 3 天之内访问这个 URL ,发送一个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码 304,如果有修改,则直接从服务器重新下载,返回状态码 200。

2、在以下路径下放入静态文件

[root@zjy ~]# cd /usr/local/webserver/static/
[root@zjy static]# ls
image  www
[root@zjy static]# cd image/
[root@zjy image]# ls
1.png
[root@zjy image]# cd ../www/
[root@zjy www]# ls
zjy.html

3、修改nginx配置文件

server{
        listen 83;
        server_name 192.168.192.129;

        location /www/ {
            root /usr/local/webserver/static/;
            index index.html index.htm zjy.html;
        }

        location /image/ {
            root /usr/local/webserver/static/;
            autoindex on;
        }
    }

其中 autoindex on 在访问路径 192.168.192.129/image 会展示文件列表。

八、Nginx配置高可用的集群

参考链接:https://www.cnblogs.com/arjenlee/p/9256835.html

1、什么是nginx的高可用

nginx作为负载均衡器,所有请求都到了nginx(对外服务的唯一入口,唯一公网IP),可见nginx处于非常重点的位置,如果nginx服务器宕机后端web服务将无法提供服务,影响严重。

​ 为了屏蔽负载均衡服务器的宕机,需要建立一个备份机。主服务器和备份机上都运行高可用(High Availability)监控程序,通过传送诸如“I am alive”这样的信息来监控对方的运行状况。当备份机不能在一定的时间内收到这样的信息时,它就接管主服务器的服务IP并继续提供负载均衡服务;当备份管理器又从主管理器收到“I am alive”这样的信息时,它就释放服务IP地址,这样的主服务器就开始再次提供负载均衡服务。

(1)需要两台nginx服务器

(2)需要keepalived

(3)需要虚拟ip

还没学。。。。。。。。。。。。。

九、Nginx的原理

1、master-works机制的好处

首先,对于每个 worker 进程来说,独立的进程,不需要加锁,所以省掉了锁带来的开销,同时在编程以及问题查找时,也会方便很多。其次,采用独立的进程,可以让互相之间不会影响,一个进程退出后,其他进程还在工作,服务不会中断, master 进程则很快启动新的worker 进程。当然,worker 进程的异常退出,肯定是程序有bug了,异常退出,会导致当前 worker上的所有请求失败,不过不会影响所有请求,所以降低了风险。

(1)可以使用nginx - s reload 热部署,利用nginx进行热部署操作。

(2)每个worker是独立的进程,如果有其中的一个worker出现问题,其他worker独立的,继续争抢,实现请求的过程,不会造成服务中断。

2、需要设置多少个worker

Nginx同redis类似都采用了io多路复用机制,每个worker都是一个独立的进程,但每个进程里只有一个主线程,通过异步非阻塞的方式来处理请求,即使是成千上万个请求也不在话下。每个worker的线程可以把一个cpu的性能发挥到极致。所以worker数和服务器的cpu数相等是最为适宜的。设少了会浪费cpu,设多了会造成cpu频繁切换上下文带来的损耗。

3、连接数 worker_connection

(1)发送请求,占用了worker的几个连接数

​ 2(静态)或4(动态)

(2)nginx 有一个 master,有四个 worker,每个 worker 支持最大的连接数据 1024 ,支持的最大并发数是多少?

这个值是表示每个worker进程所能建立链接的最大值,所以,一个nginx能建立的最大连接数,应该是 worker_connections * worker_processes。当然,这里说的最大连接数,对于 HTTP 请求本地资源来说,能够支持的最大并发数量是 worker_connections * worker_processes,如果是支持 HTTP1.1 的浏览器每次访问要占两个连接,所以普通的静态访问最大并发数是:worker_connections * worker_processer /2,而如果是 HTTP 作为反向代理来说,最大并发数量应该是 worker_connections * worker_process/4。因为作为反向代理服务器,每个并发会建议与客户端的连接和与后端服务的连接,会占用两个连接。
常退出,肯定是程序有bug了,异常退出,会导致当前 worker上的所有请求失败,不过不会影响所有请求,所以降低了风险。

(1)可以使用nginx - s reload 热部署,利用nginx进行热部署操作。

(2)每个worker是独立的进程,如果有其中的一个worker出现问题,其他worker独立的,继续争抢,实现请求的过程,不会造成服务中断。

2、需要设置多少个worker

Nginx同redis类似都采用了io多路复用机制,每个worker都是一个独立的进程,但每个进程里只有一个主线程,通过异步非阻塞的方式来处理请求,即使是成千上万个请求也不在话下。每个worker的线程可以把一个cpu的性能发挥到极致。所以worker数和服务器的cpu数相等是最为适宜的。设少了会浪费cpu,设多了会造成cpu频繁切换上下文带来的损耗。

3、连接数 worker_connection

(1)发送请求,占用了worker的几个连接数

​ 2(静态)或4(动态)

(2)nginx 有一个 master,有四个 worker,每个 worker 支持最大的连接数据 1024 ,支持的最大并发数是多少?

这个值是表示每个worker进程所能建立链接的最大值,所以,一个nginx能建立的最大连接数,应该是 worker_connections * worker_processes。当然,这里说的最大连接数,对于 HTTP 请求本地资源来说,能够支持的最大并发数量是 worker_connections * worker_processes,如果是支持 HTTP1.1 的浏览器每次访问要占两个连接,所以普通的静态访问最大并发数是:worker_connections * worker_processer /2,而如果是 HTTP 作为反向代理来说,最大并发数量应该是 worker_connections * worker_process/4。因为作为反向代理服务器,每个并发会建议与客户端的连接和与后端服务的连接,会占用两个连接。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值