Nginx如何配置多个服务域名解析共用80端口详解

Posted zhangzhiping35

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx如何配置多个服务域名解析共用80端口详解相关的知识,希望对你有一定的参考价值。

前言

由于公司一台服务器同时有多个服务,这些服务通过域名解析都希望监听80/443端口直接通过域名访问,比如有demo.test.com和product.test.com。这时候我们可以使用nginx的代理转发功能帮我们实现共用80/443端口的需求。

备注:由于HTTP协议默认监听80端口,HTTPS协议默认监听443端口,所以使用浏览器访问80/443端口的服务时,可以忽略域名后的“ :80/:443” 端口,直接配置监听到80端口,访问比较方便。

配置nginx多服务共用80端口

首先找到nginx配置文件    

通过apt-get install nginx命令安装的nginx默认配置文件存放在:/etc/nginx目录下
  
切换到/etc/nginx目录
  
#cd /etc/nginx           #切换到nginx目录
  
# ls                     #查看nginx目录下文件
conf.d        fastcgi_params  koi-win     modules-available  nginx.conf    scgi_params      sites-enabled  uwsgi_params fastcgi.conf  koi-utf         mime.types  modules-enabled    proxy_params  sites-available  snippets       win-utf
  
#vim nginx.conf          #打开nginx配置文件(输入shift+i插入内容,esc退出编辑,点击shift+:输入q退出当前页,q!强制退出,不保存编辑的内容;输入wq!强制退出并保存)

以下以两个服务使用域名访问,共用80端口为例

方案一:多个不同端口服务共用80端口

1)配置nginx.conf文件

1.先配置两个端口服务:
// nginx.conf
#demo
server 
    listen       8001;
    server_name localhost;
    try_files $uri $uri/ /index.html;
    root    /home/www/demo;

#product
server 
    listen        8002;
    server_name  localhost;
    try_files $uri $uri/ /index.html;
    root    /home/www/product;

  
2.配置代理:
// nginx.conf
#demo转发
server 
    listen       80;
    server_name demo.test.com;
    location / 
        proxy_pass http://localhost:8001;
    

#product转发
server 
    listen       80;
    server_name product.test.com;
    location / 
        proxy_pass http://localhost:8002;
    

2)配置完成后重启nginx服务

#systemctl restart nginx

3)  如果是本地局域网需要配置网络将对应的端口,我这边是80,8001,8002三个端口映射到公网IP,并解析对应的域名,完成后就可以正常访问了;

 

方案二:多个服务共用80端口

1)配置nginx.conf文件

// nginx.conf
# nginx 80端口配置 (监听demo二级域名)
server 
    listen  80;
    server_name     demo.test.com;
    location / 
        root   /home/www/demo;
        index  index.html index.htm;
    

  
# nginx 80端口配置 (监听product二级域名)
server 
    listen  80;
    server_name     product.test.com;
    location / 
        root   /home/www/product;
        index  index.html index.htm;
    

2)参考方案一,配置完成后保存,重启nginx服务,访问测试。

 

 

nginx如何自动添加域名端口?

使用https协议用nginx做反向代理,nginx.conf配置如下
server
listen 80;
server_name xxxxxxxxx.cn;
rewrite ^(.*) https://$server_name$1 permanent;


server
listen 443 ssl;
server_name xxxxxxxxx.cn;
ssl_certificate /usr/share/nginx/html/cert/3705965__sasu.edu.cn.pem;
ssl_certificate_key /usr/share/nginx/html/cert/3705965__sasu.edu.cn.key;
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;
ssl_session_timeout 5m;

location /
# proxy_redirect off;
# proxy_set_header Host $host;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass https://127.94.231.40:6830;


使用反向代理域名访问https://xxxxxxxxx.cn:443 会自动跳转到页面https://xxxxxxxxx.cn/welcome/;
使用被代理域名https://127.94.231.40:6830访问,会自动跳转到页面https://127.94.231.40:6830/welcome/;这个和所需要的地址https://xxxxxxxxx.cn:443/welcome/是同一个页面。
可以看出在使用nginx反向代理访问后,域名后面没有自动带出443端口。麻烦看下配置哪里有问题。

参考技术A 首先安装时候nginx要带上这个模块,./configure --prefix=/usr/local/nginx --with-stream
在nginx.conf里面配置上类似以下配置文件:
stream

upstream dack
server 127.0.0.1:9092;
server 127.0.0.1:9093;
server 127.0.0.1:9094;


server
listen 9091;
proxy_pass dack;



注意:stream级别和http同级。

以上是关于Nginx如何配置多个服务域名解析共用80端口详解的主要内容,如果未能解决你的问题,请参考以下文章

Nginx配置多个服务共用80端口

iis下的多个网站如何共用80端口

nginx如何自动添加域名端口?

nginx怎么把来自80端口的请求交给8080

Nginx配置——单域名反向代理多个端口

求助nginx绑定多个网站公用80端口的问题