nginx 服务器的应用
一、Nginx提供的虚拟主机功能。(注意:配置文件修改后需要重新开启 nginx服务)
虚拟主机可以让一台物理服务器当做多个服务器来使用,从而可以配置多个网站。Nginx 提供虚拟主机的功能,就是为了让我们不需要安装多个 Nginx,就可以运行多个域名不同的网站。nginx 的虚拟主机就是通过 nginx.conf 中 server 节点指定的,一个 server 标签就是一个虚拟主机,想要设置多个虚拟主机,配置多个server节点即可。
1、通过端口区分不同的虚拟主机,访问主机地址+对应的端口号即可访问对应的页面。
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
}
server {
listen 81;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html-81;
index index.html index.htm;
}
}
2、通过域名区分虚拟主机,通过对应的 ip 地址即可访问对应的页面。
server {
listen 80;
server_name www.xxx1.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html-taobao;
index index.html index.htm;
}
}
server {
listen 80;
server_name www.xxx2.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html-baidu;
index index.html index.htm;
}
}
二、反向代理。
1、在服务器上安装两个 tomcat,分别运行在 8080 和 8081 端口下。(需要修改 tomcat 默认端口号)
2、启动两个 tomcat 。
3、在 nginx.conf 中加入反向代理的配置。
upstream tomcat1 {
server 192.168.37.131:8080;
}
server {
listen 80;
server_name www.xxx1.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://tomcat1;
index index.html index.htm;
}
}
upstream tomcat2 {
server 192.168.25.148:8081;
}
server {
listen 80;
server_name www.xxx2.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://tomcat2;
index index.html index.htm;
}
}
4、重新启动 nginx。
5、在主机中配置域名和ip的映射关系。
6、通过域名访问即可。
三、负载均衡。
如果一个服务由多条服务器提供,需要把负载分配到不同的服务器处理,需要负载均衡。
upstream tomcat2 {
server 192.168.37.131:8081;
server 192.168.37.131:8082;
}
可以根据服务器的实际情况调整服务器权重。权重越高分配的请求越多,权重越低,请求越少。默认是都是1。
upstream tomcat2 {
server 192.168.37.131:8081;
server 192.168.37.131:8082 weight=2;
}
四、通过反向代理绕过网关。
server {
listen 80;
server_name api.sfwu.com;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 匹配到路径 /api/upload 时通过反向代理绕过网关
location /api/upload {
# 直接跳转到主机名和端口号,不走网关
proxy_pass http://10.200.0.232:8082;
proxy_connect_timeout 600;
proxy_read_timeout 600;
rewrite "^/(.*)$" /zuul/$1 break;
}
location / {
proxy_pass http://10.200.0.232:10010;
proxy_connect_timeout 600;
proxy_read_timeout 600;
}
}
通过正则表达式重写路径,由于路径 /api/upload 中的 api 是多余的,需要重写路径将 api 去掉并得到正确的路径,否则报错!
正则表达式以 ^ 开头,$ 结尾(^ $)
^ /api/(.*)$ $/1 /api/代表匹配到/api/开头这种格式的路径 (.*)代表任意。
^ /api/(.*)$:匹配 /api/ 后面的所有路径。
$/1:取第一组,也就是重写的路径 /upload 即将 /api/upload 路径重写为 /upload
break:重写路径结束后,不在重新匹配路径。直接走 http://10.200.0.232:8082
last:重新匹配路径。