Nginx的相关问题

Posted --->别先生<---

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx的相关问题相关的知识,希望对你有一定的参考价值。

1、什么是nginx的虚拟主机?

  答:虚拟主机是一种特殊的软硬件技术,它可以将网络上的每一台计算机分成多个虚拟主机,每个虚拟主机可以独立对外提供www服务,这样就可以实现一台主机对外提供多个web服务,每个虚拟主机之间是独立的,互不影响的。通过nginx可以实现虚拟主机的配置,nginx支持三种类型的虚拟主机配置,a、基于ip的虚拟主机, b、基于域名的虚拟主机 c、基于端口的虚拟主机。

2、Nginx的nginx.conf配置都代表什么意思?

 1 # 从第一个虚拟主机的例子可以看出nginx的配置文件结构如下。
 2 # user 代表访问权限是什么,就是通过nginx访问linux 服务器中文件时,使用的用户权限。
 3 user ftpuser;
 4 
 5 # 工作流程 ID。
 6 worker_processes    1;
 7 
 8 # events模块中包含nginx中所有处理连接的设置。
 9 events {
10     # 工作进程的最大连接数量,理论上每台nginx服务器的最大连接数为worker_processes*worker_connections,worker_processes为我们再main中开启的进程数。
11     worker_connections    1024;
12 }
13 
14 # 定义http服务器内容。里面的每个server就是一个虚拟主机。
15 http {
16     include         mime.types;                    # 加载响应类型。
17     default_type    application/octet-stream;   # 默认使用 IO 流实现请求/应答。
18     sendfile        on;                         # 是否支持文件传输。
19     keepalive_      timeout    65;                 # 心跳监测。
20     
21     # 配置一个服务节点。每个server就是一个虚拟主机。
22     server {
23         listen        80;                 # 端口。监听的端口就是80
24         server_name    localhost;       # 监听的地址/IP/域名/主机名。
25         
26         
27         # 当前网络服务节点对应本地什么目录。
28         # 相对地址,从 nginx 安装目录开始寻址. 绝对地址从根开始寻址 。
29         # 请求过来后去那里找对应的资源,比如欢迎页。
30         location / {
31             # 修改web服务节点的根目录为ftpuser用户的主目录。 
32             root /home/ftpuser; # 注意,这里的root是根目录root哦,
33             #root    html; # 映射的根目录root。html是相对路径,html是nginx里面的html目录。
34             index    index.html index.htm; # 欢迎页面。
35         }
36         
37         # 如果出现错误,显示的页面。
38         error_page    500 502 503 504    /50x.html;
39         location = /50x.html {
40             root    html;
41         }
42     }
43 }

如何在vim里面复制大段。

vim环境进行复制,粘贴。a、shift+v(即V)进入行选模式。b、上下箭头选中要复制的块。c、y进行复制。d、p进行粘贴。

3、如何根据端口进行区分虚拟主机。

nginx对外提供80和81两个端口监听服务。

请求80端口则请求html目录下的html,请求81端口则请求html81目录下的html。

将原来nginx的html目录拷贝一个目录"html81",为了方便测试需要修改每个目录下的index.html内容使之个性化。

修改/usr/local/nginx/conf/nginx.conf文件,新添加一个虚拟主机,如下:

 1 #user  nobody;
 2 worker_processes  1;
 3 
 4 events {
 5     worker_connections  1024;
 6 }
 7 
 8 http {
 9     include       mime.types;
10     default_type  application/octet-stream;
11 
12     sendfile        on;
13     
14     keepalive_timeout  65;
15     # 配置虚拟主机
16     server {
17     # 监听的ip和端口,配置80
18         listen       80;
19     # 虚拟主机名称这里配置ip地址
20         server_name  192.168.110.142;
21     # 所有的请求都以/开始,所有的请求都可以匹配此location
22         location / {
23         
24         # 比如访问http://192.168.110.142/login.html将找到/usr/local/nginx/html/login.html
25         # 比如访问http://192.168.110.142/register/login.html将找到/usr/local/nginx/html/register/register.html
26         # root   html;
27         root /usr/local/nginx/html;
28         # 指定欢迎页面,按从左到右顺序查找
29         index  index.html index.htm;
30         }
31 
32     }
33     #配置虚拟主机
34     server {
35         listen       81;
36         server_name  192.168.110.142;
37 
38         location / {
39             root   /usr/local/nginx/html81;
40             index  index.html index.htm;
41         }
42 
43     }
44 
45 }

 演示效果如下所示:

4、基于域名来区分的虚拟主机配置。

首先在C:\\Windows\\System32\\drivers\\etc\\host文件里面添加如下配置内容:

然后你的nginx的nginx.conf配置如下所示:

  1 #user  nobody;
  2 worker_processes  1;
  3 
  4 #pid        logs/nginx.pid;
  5 
  6 
  7 events {
  8     worker_connections  1024;
  9 }
 10 
 11 
 12 http {
 13     include       mime.types;
 14     default_type  application/octet-stream;
 15 
 16     #log_format  main  \'$remote_addr - $remote_user [$time_local] "$request" \'
 17     #                  \'$status $body_bytes_sent "$http_referer" \'
 18     #                  \'"$http_user_agent" "$http_x_forwarded_for"\';
 19 
 20     #access_log  logs/access.log  main;
 21 
 22     sendfile        on;
 23     #tcp_nopush     on;
 24 
 25     #keepalive_timeout  0;
 26     keepalive_timeout  65;
 27 
 28     #gzip  on;
 29 
 30     server {
 31         listen       80;
 32         server_name  localhost;
 33         
 34         location / {
 35             # 比如访问http://192.168.110.142/login.html将找到/usr/local/nginx/html/login.html
 36             # 比如访问http://192.168.110.142/register/login.html将找到/usr/local/nginx/html/register/register.html
 37             # root   html;
 38             root /usr/local/nginx/html;
 39             index  index.html index.htm;
 40         }
 41 
 42         # redirect server error pages to the static page /50x.html
 43         error_page   500 502 503 504  /50x.html;
 44         location = /50x.html {
 45             root   html;
 46         }  
 47     }
 48 
 49 
 50     server {
 51         listen       81;
 52         server_name  localhost;
 53 
 54         location / {
 55             root   html81;
 56             index  index.html index.htm;
 57         }
 58         # redirect server error pages to the static page /50x.html
 59         error_page   500 502 503 504  /50x.html;
 60         location = /50x.html {
 61             root   html81;
 62         }
 63      
 64     }
 65 
 66     server {
 67         listen       192.168.110.142:80; # 相同的端口号80
 68         server_name  www.baidu.com; # 域名,用来区分虚拟主机
 69 
 70         location / {  # 使用root指令指定虚拟主机目录即网页存放目录。
 71             root   html-baidu; # http://www.baidu.com/访问的是这个目录html-baidu下面的index.html,没有index.html就访问index.htm。如果都咩有就访问错误页面。
 72             index  index.html index.htm; # 指定欢迎页面,按从左到右顺序查找
 73         }
 74         # redirect server error pages to the static page /50x.html
 75         error_page   500 502 503 504  /50x.html;
 76         location = /50x.html {
 77             root   html-baidu;
 78         }
 79      
 80     }
 81     
 82     
 83     server {
 84         listen       192.168.110.142:80; # 相同的端口号80
 85         server_name  www.taobao.com; # 虚拟主机名称是www.baidu.com,请求域名www.baidu.com的url将由此server配置解析。# 域名,用来区分虚拟主机
 86 
 87         location / { # 所有的请求都以/开始,所有的请求都可以匹配此location。
 88             root   html-taobao; # http://www.taobao.com/访问的是这个目录html-taobao下面的index.html,没有index.html就访问index.htm。如果都咩有就访问错误页面。
 89             index  index.html index.htm;
 90         }
 91         # redirect server error pages to the static page /50x.html
 92         error_page   500 502 503 504  /50x.html;
 93         location = /50x.html {
 94             root   html-taobao;
 95         }
 96      
 97     }
 98 
 99    
100 
101 }

效果如下所示:

6、什么是反向代理。

  通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中由代理服务器向Internet上的web服务器发起请求,最终达到客户机上网的目的。
  而反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

7、如何首先Nginx的反向代理呢?

  注意:你的请求,到达了Nginx反向代理服务器,然后由Nginx转发到应用服务器(例如Tomcat), Nginx实际是不处理请求的,做的事情即是请求的转发。反向代理服务器后面应该有应用服务器的(例如Tomcat服务器)。

  如何实现Nginx的反向代理呢,这里部署三台Tomcat服务器。第一台tomcat的端口号默认即可,第二台(8006、8081、8010)、第三台(8007、8082、8011)虚拟机的server.xml端口号依次加1。为了区分访问的tomcat服务器的不同,将/usr/local/tomcat/tomcat01/webapps/ROOT/index.jsp这个界面进行修改,以示区分。

  开始配置Nginx的请求转发,反向代理。修改完毕以后,重启你的Nginx,启动你的三台tomcat。

  1 #user  nobody;
  2 worker_processes  1;
  3 
  4 #pid        logs/nginx.pid;
  5 
  6 
  7 events {
  8     worker_connections  1024;
  9 }
 10 
 11 
 12 http {
 13     include       mime.types;
 14     default_type  application/octet-stream;
 15 
 16     #log_format  main  \'$remote_addr - $remote_user [$time_local] "$request" \'
 17     #                  \'$status $body_bytes_sent "$http_referer" \'
 18     #                  \'"$http_user_agent" "$http_x_forwarded_for"\';
 19 
 20     #access_log  logs/access.log  main;
 21 
 22     sendfile        on;
 23     #tcp_nopush     on;
 24 
 25     #keepalive_timeout  0;
 26     keepalive_timeout  65;
 27 
 28     #gzip  on;
 29 
 30     server {
 31         listen       80;
 32         server_name  localhost;
 33         
 34         location / {
 35             # 比如访问http://192.168.110.142/login.html将找到/usr/local/nginx/html/login.html
 36             # 比如访问http://192.168.110.142/register/login.html将找到/usr/local/nginx/html/register/register.html
 37             # root   html;
 38             root /usr/local/nginx/html;
 39             index  index.html index.htm;
 40         }
 41 
 42         # redirect server error pages to the static page /50x.html
 43         error_page   500 502 503 504  /50x.html;
 44         location = /50x.html {
 45             root   html;
 46         }  
 47     }
 48 
 49 
 50     server {
 51         listen       81;
 52         server_name  localhost;
 53 
 54         location / {
 55             root   html81;
 56             index  index.html index.htm;
 57         }
 58         # redirect server error pages to the static page /50x.html
 59         error_page   500 502 503 504  /50x.html;
 60         location = /50x.html {
 61             root   html81;
 62         }
 63      
 64     }
 65 
 66     server {
 67         listen       192.168.110.142:80; # 相同的端口号80
 68         server_name  www.baidu.com;
 69 
 70         location / {
 71             root   html-baidu; # http://www.baidu.com/访问的是这个目录html-baidu下面的index.html,没有index.html就访问index.htm。如果都咩有就访问错误页面
 72             index  index.html index.htm;
 73         }
 74         # redirect server error pages to the static page /50x.html
 75         error_page   500 502 503 504  /50x.html;
 76         location = /50x.html {
 77             root   html-baidu;
 78         }
 79      
 80     }
 81     
 82     
 83     server {
 84         listen       192.168.110.142:80; # 相同的端口号80
 85         server_name  www.taobao.com;
 86 
 87         location / {
 88             root   html-taobao; # http://www.taobao.com/访问的是这个目录html-taobao下面的index.html,没有index.html就访问index.htm。如果都咩有就访问错误页面
 89             index  index.html index.htm;
 90         }
 91         # redirect server error pages to the static page /50x.html
 92         error_page   500 502 503 504  /50x.html;
 93         location = /50x.html {
 94             root   html-taobao;
 95         }
 96      
 97     }
 98     
 99     # 定义一个upstream tomcat01。配置一个代理即tomcat01服务器。
100     upstream tomcat01 {
101         # proxy_pass http://tomcat01找到upstream tomcat01的时候。指定ip和端口号。
102         server 192.168.110.142:8080;
103     }
104     
105     # 定义一个upstream tomcat02。配置一个代理即tomcat02服务器。
106     upstream tomcat02 {
107         # proxy_pass http://tomcat02 找到upstream tomcat02 的时候。指定ip和端口号。
108         server 192.168.110.142:8081;
109     }
110     
111     # 定义一个upstream tomcat03。配置一个代理即tomcat03服务器。
112     upstream tomcat03 {
113         # proxy_pass http://tomcat03 找到upstream tomcat03 的时候。指定ip和端口号。
114         server 192.168.110.142:8082;
115     }
116 
117    server {
118         listen       192.168.110.142:80; # 相同的端口号80
119         server_name  www.tomcat01.com;
120 
121         location / { # 域名www.tomcat01.com的请求全部转发到http://tomcat01即tomcat01服务上
122             # http请求过来以后找到http://tomcat01,proxy_pass http://tomcat01;找到上面定义的upstream tomcat01。
123             proxy_pass http://tomcat01; # 访问静态资源可以使用root,现在做反向代理使用的是proxy_pass(代理,请求转发)。
124             index  index.html index.htm;
125         }
126      
127     }
128     
129     server {
130         listen       192.168.110.142:80; # 相同的端口号80
131         server_name  www.tomcat02.com;
132 
133         location / {
134             # http请求过来以后找到http://tomcat02,proxy_pass http://tomcat02;找到上面定义的upstream tomcat02。
135             proxy_pass http://tomcat02; # 访问静态资源可以使用root,现在做反向代理使用的是proxy_pass(代理,请求转发)。
136             index  index.html index.htm;
137         }
138      
139     }
140     
141     server {
142         listen       192.168.110.142:80; # 相同的端口号80
143         server_name  www.tomcat03.com;
144 
145         location / {
146             # http请求过来以后找到http://tomcat03,proxy_pass http://tomcat03;找到上面定义的upstream tomcat03。
147             proxy_pass http://tomcat03; # 访问静态资源可以使用root,现在做反向代理使用的是proxy_pass(代理,请求转发)。
148             index  index.html index.htm;
149         }
150      
151     }
152     
153 
154 }

C:\\Windows\\System32\\drivers\\etc\\host配置文件里面添加了如下配置:

192.168.110.142 www.tomcat01.com
192.168.110.142 www.tomcat02.com
192.168.110.142 www.tomcat03.com

效果如下所示:

8、什么是负载均衡?

  负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
  负载均衡,英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。

9、如何实现负载均衡?

  这里再次拷贝一个tomcat服务器。然后修改配置文件的端口号,和index.jsp界面用于区分,是否实现了负载均衡。这里是在上面反向代理的基础上添加了负载均衡,默认是使用的轮询。然后启动你新加的tomcat,重启Nginx即可。

1 # 定义一个upstream tomcat01。
2     # upstream节点里面存在两台服务器。
3     upstream tomcat01 {
4         # proxy_pass http://tomcat01找到upstream tomcat01的时候。指定ip和端口号。
5         server 192.168.110.142:8080;
6         # 实现负载均衡,这个时候默认使用的是轮询,一个一次。以此循环。
7         server 192.168.110.142:8083;
8     }

实现效果如下所示:

负载均衡如何调整权重,如下所示:然后重启你的Nginx,进行查看效果即可。

 1 # 定义一个upstream tomcat01。
 2     # upstream节点里面存在两台服务器。
 3     upstream tomcat01 {
 4         # proxy_pass http://tomcat01找到upstream tomcat01的时候。指定ip和端口号。
 5         # 可以使用weight参数调整权重,默认都是1。如果想向某个机器多发送请求,可以配置如下所示。
 6         server 192.168.110.142:8080 weight=1;
 7         # 实现负载均衡,这个时候默认使用的是轮询,一个一次。以此循环。
 8         # 权重weight=2的机会大于weight=1的。调整不同服务器的权重,可以根据服务器的性能进行调整的。
 9         server 192.168.110.142:8083 weight=2;
10     }

权重weight=2的访问机会大于weight=1的。调整不同服务器的权重,可以根据服务器的性能进行调整的。效果如下所示:

9、为什么实现nginx负载均衡高可用?

  比如说,Nginx挂了,那么你的请求转发不到应用服务器,那么如何解决这个问题呢,这个时候就要保障Nginx的高可用的。如何实现Nginx的高可用呢。

10、什么是负载均衡高可用?

  Nginx作为负载均衡器,所有请求都到了nginx,可见nginx处于非常重点的位置,如果nginx服务器宕机后端web服务将无法提供服务,影响严重。
  为了屏蔽负载均衡服务器的宕机,需要建立一个备份机。主服务器和备份机上都运行高可用(High Availability)监控程序,通过传送诸如“I am alive”这样的信息来监控对方的运行状况。当备份机不能在一定的时间内收到这样的信息时,它就接管主服务器的服务IP并继续提供负载均衡服务;当备份管理器又从主管理器收到“I am alive”这样的信息时,它就释放服务IP地址,这样的主服务器就开始再次提供负载均衡服务。

待续......

以上是关于Nginx的相关问题的主要内容,如果未能解决你的问题,请参考以下文章

nginx.conf 忽略了 nginx-ingress 配置映射片段

Wagtail - 在页面上呈现带有相关片段和标签的数据时遇到问题

Jekyll 偏移代码片段高亮的初始行

AJAX相关JS代码片段和部分浏览器模型

text 有用的nginx命令和片段

从零开始配置vim(27)——代码片段