nginx反向代理二级域名注意事项

 摘要

   本文介绍了利用nginx实现多域名和多站点的绑定的方法及相关注意事项。您也能够只看标题红色标注部分。node

一、应用场景

  咱们常常会遇到在同一台服务器创建多个Web站点的状况,广泛的作法是为不一样的站点配置不一样的端口,这样就能够用IP:Port的形式访问。python

  可是用IP访问毕竟不方便,不生动,不容易记忆。那么,咱们能够给每一个站点绑定不一样的域名。(在这里咱们仅谈公网状况)即便咱们只有一个域名,咱们能够设置多个二级域名,使用Nginx很容易实现。nginx

二、基本要求

  一般,网上教程会直接贴一段配置文件的代码,告诉咱们如此这般就Ok了。但我发现不少新手看着教程配置,并不能像博主那样就Success了,因此接下来咱们谈一下基本原理。浏览器

  首先,要有一个本身能管理的域名,好比我有一个 postmsg.cn 的域名,就能够生出多个子域名,二世三世千万世……缓存

  其次,有一台能访问的公网服务器,能够在这台服务器上创建本身的Web站点,一个两个三四个,对应端口不一。服务器

  而后,就是域名和站点的绑定,一个萝卜一个坑,固然也能够多个萝卜一个坑……app

三、通常配置

  须要配置的地方有两个,咱们先谈首要先决条件,也是有些新手容易忽略的地方。tcp

  (1)域名配置post

    把域名的A记录解析指向咱们的公网服务器,这一点通常人都能想到。解析的时候只能加IP,是不能带端口号的,即只能使用默认的80端口。(不讨论域名转发)阿里云

    若想实现子域名绑定,在域名解析的时候必须配置合理。不然只靠Nginx是不行的。

    例如我要把子域名  p.postmsg.cn 绑定到 服务器的 8001端口,我首先要保证访问 p.postmsg.cn 的请求能到达该服务器而后Nginx才能处理

    此时,要么在域名A记录解析里加一条 p 的主机记录,要么主机记录里有通配符 * 的配置(*.postmsg.cn的访问所有解析到对应的服务器,慎用),只设置@和www确定是不行的。

    

                        图1 - 域名解析示例

  (2)主机配置

    域名的请求到达主机以后,一切才能够交给Nginx来处理

    修改Nginx配置的时候,能够直接在默认配置文件(例如/etc/nginx/nginx.conf,如如下代码片断所示)里修改,也能够在某个目录下新建独立的配置文件,而后 include 这个目录下的配置文件(如第17行所示)。

http {
    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  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    include /etc/nginx/conf.d/*.conf;
}

  这是Nginx读取配置文件的格式,咱们的配置一般写在 http { } 块里,加上 server 块,在server块里配置。刚才也说了,server块能够写在一个单独文件里,在nginx.conf里包含该文件,同时,支持嵌套 include。

  接下来看一下 server 块的写法:

server {
    listen 80;
    server_name p.postmsg.cn; 
    location / {
	proxy_pass http://127.0.0.1:8008; 
        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;
    }
    #access_log logs/p_access.log;
}

  这里的 server_name 对应配置的域名,proxy_pass对应代理的真实地址。

 

  (3)注意事项一

    必定要把 80 端口留给负责代理的Nginx。咱们能够在一个服务器上同时使用Apache httpd,Nginx,Tomcat,可是域名解析只能使用默认的80端口,负责代理的同志要拿到第一手请求。

  (4)注意事项二

    即时生效性。有的朋友感受本身配置的都对,也重启服务了,可就是看不到想要的结果。这里有三个方面的可能因素。

    ➀ 域名解析生效时间。阿里云的域名最低生效时间是10分钟,有时候可能大于这个值。

    ➁ 本地DNS缓存。可在CMD使用 ipconfig /flushdns 命令刷新本地DNS缓存。

     浏览器缓存。这个可能才是最不容易发现的,尤为是谷歌浏览器。F12以后,右键左上角地址栏边上的刷新按钮,点击清空缓存并硬性从新加载。

    ➃ 服务未重启service nginx restart 有时候可能没有先 stop, 再 start 好用。

四、总结

  本文闲扯了利用Nginx实现多域名代理的相关事宜。

  若您发现本文所述有失偏驳之处,或有待改进之处,或您有其它想法、意见及建议,请在评论区留言,谢谢!

相关文章
相关标签/搜索