Nnginx反向代理到多域名

avatar 2019年12月6日22:51:29 评论 1,220 次浏览

我们使用多个域名指定到nginx集群上,然后通过域名的请求分发到不同的服务器上,再分布式中使用的相对较多,下面看实验的要求,我已经把两个域名同时绑定到同一个IP上了,并且在nginx中已经做了限制,主要限制的是针对那些自己把域名绑定到我的IP上的域名,这些域名虽然不会影响到我的服务,但是对于搜索引擎会产出一些影响,所以就限制了一下,只有我在nginx指定的域名绑定到我的IP访问才会正常,其他的都返回502.也做了禁止IP访问等策略。使用分布式的目的是针对项目中有多个关联的小项目的连接,一是简单,二是方便处理,三是便于管理。

实验简介

需要通过www.wulaoer.org和一个二级域名gitbook.wulaoer.org同时绑定到同一个公网IP,并把两个域名的请求发送到相应的服务上。这里域名已经绑定好了,我就使用线上的数据做个例子,现在www.wulaoer.org域名可以正常方位,下面要实现的就是把gitbook.wulaoer.org域名也能正常访问即可。先进入nginx

[root@wulaoer ~]# cd /usr/local/nginx/conf/
[root@wulaoer conf]# ls
enable-php.conf           example       fastcgi.conf.default  fastcgi_params.default  koi-win     mime.types.default  nginx.conf-20191205  nginx.conf_ghttp  pathinfo.conf  scgi_params          uwsgi_params          vhost
enable-php-pathinfo.conf  fastcgi.conf  fastcgi_params        koi-utf                 mime.types  nginx.conf          nginx.conf.default   nginx.conf_ssl    rewrite        scgi_params.default  uwsgi_params.default  win-utf

我的nginx.conf配置文件中有一条指定vhost目录的配置信息。

    access_log  /home/wwwlogs/access.log;
include vhost/*.conf;
}
[root@wulaoer conf]#

我们在vhost目录下创建一个新的nginx配置信息,这里不和nginx.conf冲突,不过格式必须是以.conf格式结尾。下面是我创建的一个二级域名的配置信息。

[root@wulaoer vhost]# cat gitbook.conf 
upstream gitbook.wulaoer.org {
    server localhost:4082;   #这里就是我另一个程序的入口,只是在本地使用
}
server {
    listen       80;
    server_name  gitbook.wulaoer.org;
    location / {
        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 http://gitbook.wulaoer.org;
    }
}

这是反向代理到指定的服务上,然后调用指定服务的IP+端口,upstream后面的字符串一定要和proxy_pass后面的http://字符串一致,如果两个域名都是本地的php文件就不需要使用upstream模块了,直接指定路径即可:

[root@wulaoer vhost]# cat gitbook.conf 

server
    {
        listen 80;
        server_name gitbook.wulaoer.org;
        index index.html index.htm index.php;
        root  /home/wwwroot/wordpress;  #网站路径
        include enable-php.conf;
        location /nginx_status
        {
            stub_status on;
            access_log   off;
        }

        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires      30d;
        }

        location ~ .*\.(js|css)?$
        {
            expires      12h;
        }

        location ~ /.well-known {
            allow all;
        }

        location ~ /\.
        {
            deny all;
        }

        access_log  /home/wwwlogs/access_wo.log;#域名的访问日志
    }

也可以在上面针对不同的服务配置不同的日志文件以便区分。配置好之后,需要重启一下nginx或者重新加载一下

验证

服务配置好了就需要验证一下,先验证不使用upstream模块的反向代理。我在两个域名的网站路径下做了区分:

[root@wulaoer vhost]# echo "这个页面的域名是www.wulaoer.org" > /home/wwwroot/default/index.html 
[root@wulaoer vhost]# echo "这个页面的域名是gitbook.wulaoer.org" > /home/wwwroot/wordpress/index.html

验证一下访问的内容:

[root@wulaoer vhost]# curl www.wulaoer.org
这个页面的域名是www.wulaoer.org
[root@wulaoer vhost]# curl gitbook.wulaoer.org
这个页面的域名是gitbook.wulaoer.org

反向代理的验证是我在自己的真实机上操作的,可以自己点击一下,域名也是一样分别是www.wulaoer.org和gitbook.wulaoer.org,不过这里的内容有些私密,所以我想加点权限上去,访问的时候需要输入用户名和密码,因为我不想我所有的东西都被人看到,所以需要设置一下。nginx权限需要用到htpasswd工具,我安装一下。

[root@wulaoer ~]# yum  -y install httpd-tools

创建登录的用户和密码

[root@wulaoer ~]# mkdir /usr/local/src/nginx
[root@wulaoer ~]# htpasswd -c /usr/local/src/nginx/passwd wulaoer
New password: 
Re-type new password: 
Adding password for user wulaoer
root@wulaoer ~]# cat /usr/local/src/nginx/passwd 
wulaoer:***************************************

创建用户的密码路径没有nginx目录所以手动创建了一个,如果创建的密码忘记了重复创建即可,相当于修改密码了。创建了用户名密码,那就添加到需要权限的nginx里,我这里两个域名的nginx,只在gitbook.wulaoer.org域名中增加权限,主域名www.wulaoer.org不增加权限了。

[root@wulaoer ~]# cd /usr/local/nginx/conf/vhost/
[root@wulaoer vhost]# vi gitbook.conf 
upstream gitbook.wulaoer.org {
    server localhost:4082;
}
server {
    listen       80;
    server_name  gitbook.wulaoer.org;
    auth_basic "Please input password";  #
    auth_basic_user_file /usr/local/src/nginx/passwd;
    location / {
        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 http://gitbook.wulaoer.org;
    }
}

重启一下nginx,在访问的时候就需要验证用户名和密码了。这里的验证主要是针对不想对外开放的内容,有用户和密码即可访问。

avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: