目的:解決只有一個(gè)服務(wù)器和域名,同時(shí)為幾個(gè)應(yīng)用提供服務(wù)的問題
舉例:比如說你現(xiàn)在有 abc.com 的主域名,你又劃分了 shop.abc.com 和 mail.abc.com 兩個(gè)二級域名來實(shí)現(xiàn)不同的功能,并希望兩個(gè)二級域名使用同一個(gè)IP地址和端口訪問,但是提供不同的服務(wù),nginx則可以監(jiān)聽指定的端口,根據(jù)域名的不同將請求轉(zhuǎn)發(fā)給相應(yīng)的端口。
實(shí)現(xiàn):
1.打開nginx的配置文件,打開 /安裝路徑/conf/nginx.conf,進(jìn)行如下配置
server {
listen 80;
server_name *.abc.com;
if ($http_host ~* "^(.*?)\.abc\.com$") { #正則表達(dá)式
set $domain $1; #設(shè)置變量
}
location / {
if ($domain ~* "shop") {
proxy_pass http://abc.com:3001; #域名中有shop,轉(zhuǎn)發(fā)到3001端口
}
if ($domain ~* "mail") {
proxy_pass http://abc.com:3002; #域名中有mail,轉(zhuǎn)發(fā)到3002端口
}
tcp_nodelay on;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#以上三行,目的是將代理服務(wù)器收到的用戶的信息傳到真實(shí)服務(wù)器上
root html;
index index.html index.htm; #默認(rèn)情況
}
}
配置域名訪問
我們一般的測試主機(jī)采用云上ECS , 出于對安全的考慮我們希望開發(fā)的端口越少越好。
一般一臺ECS上面可能要部署多個(gè)服務(wù),采用nginx代理訪問,ECS安全策略為只開放一個(gè)端口 9009 然后配置訪問各服務(wù)。
nginx 配置如下:
#user nobody;
worker_processes 4;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
keepalive_timeout 90;
gzip on;
gzip_min_length 2k;
gzip_buffers 4 32k;
gzip_http_version 1.1;
gzip_comp_level 6;
gzip_types text/plain text/css text/javascriptapplication/json application/j avascript application/x-javascriptapplication/xml;
gzip_vary on;
gzip_proxied any;
access_log off;
server {
listen 9009; #// 開發(fā)的端口
server_name www.xxx.com;
#charset koi8-r;
#access_log logs/host.access.log main;
#// jenkins 配置, 記得配置一下Jenkins war服務(wù)的前綴為 "jenkins/"
#// 訪問路徑為 http://xxxxx:9009/jenkins
location /jenkins/
{
proxy_redirect off;
# proxy_set_header Host $host;
proxy_set_header Host $host:$server_port; #$server_port
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Nginx-Proxy true;
proxy_pass http://localhost:8080/jenkins/;
}
#// SpringBoot 微服務(wù) boot-service-api 的swagger訪問路徑, 端口8081 context-path: /boot-service-api
#// 訪問路徑為 http://xxxxx:9009/boot-service-api/swagger/swagger-ui.html
location /boot-service-api/swagger/
{
proxy_redirect off;
# proxy_set_header Host $host;
proxy_set_header Host $host:$server_port; #添加:$server_port
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8081/boot-service-api/;
}
#// SpringBoot 前端頁面VUE的訪問路徑
#// 訪問路徑為 http://xxxxx:9009/boot-service-vue
location /boot-service-vue
{
#// vue 靜態(tài)頁面文件的存放位置
alias /opt/vue/boot-service-vue/dist/;
index index.html index.htm;
}
#// SpringBoot 微服務(wù) boot-service-api 的訪問路徑
#// 訪問路徑為 http://xxxxx:9009/boot-service-api
location /boot-service-api/api/
{
proxy_redirect off;
# proxy_set_header Host $host;
proxy_set_header Host $host:$server_port; #$server_port
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Nginx-Proxy true;
proxy_pass http://localhost:8081/boot-service-api/api/;
}
#// nacos 的訪問路徑
#// 訪問路徑為 http://xxxxx:9009/nacos
location /nacos/
{
proxy_redirect off;
# proxy_set_header Host $host;
proxy_set_header Host $host:$server_port; #$server_port
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8848/nacos/;
}
# 其他錯(cuò)誤頁面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
}