docker中Nginx的安装和配置

Nginx安装


$ docker pull daocloud.io/library/nginx

nginx 容器创建

$ docker run --name=nginx -p 80:80 -v /app/nginx/www:/usr/share/nginx/html 
-v /app/nginx/conf.d:/etc/nginx/conf.d -d nginx

nginx 默认服务器静态资源目录: /usr/share/nginx/html

nginx 默认配置文件目录: /etc/nginx/conf.d

我们这里通过Volume映射到了 /app/nginx/www 目录; 以后如果要解析html 只要直接把文件上传到 /app/nginx/www 即可; 我们这里为了方便设置nginx的反向代理, 也把这个目录映射到 /app/nginx/conf.d 了; 所以我们必须手动创建一个nginx的配置文件,不然打开Chrome浏览器是无法访问到的.


$ vi /app/nginx/conf.d/default.conf

# 复制并粘贴下面的内容

server {
    listen       80;
    server_name  localhost;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
}


配置生效

创建完 nginx 的配置文件之后,我们要让配置生效,才能使用

第一种:更新 nginx配置

nginx 加载conf.d 目录下面的配置

$ docker exec -it nginx /etc/init.d/nginx reload

第二种:重启nginx

docker restart nginx

到这里,nginx就简单的配置完成了. 把我们的项目文件放进入/app/nginx/www就可以访问了。

多域名配置

nginx服务器绑定域名和设置根目录的方法

server_name指定域名、index 指定默认首页、root指定根目录。可以多个域名绑定不同的根目录

/app/nginx/www 中有文件夹search,对应到 docker中 nginx的root就是

/usr/share/nginx/html/search.

vi /app/nginx/conf.d/default.conf
# 复制下面的并粘贴上去

server {
    listen       80;
    server_name  search.xxxxxx.com;

    location / {
        root   /usr/share/nginx/html/search;  
        index  index.html index.htm;
    }
}

nginx服务器绑定域名和端口的方法

我们都知道如果在域名管理的控制面板设置域名对应ip只能设置到ip,不能详细设置到端口。如果一台服务器部署了多个web应用,使用的不同端口启动的,那么就可以Nginx做映射。

比如我有一个域名 www.xxxxxx.com。

域名还可以分出2级域名: play.xxxxxx.com。

我在域名控制面板把这两个域名都指向我的服务器公网ip xx.xx.xx.xx。

这时候发现www.xxxxxx.com和play.xxxxxx.com域名访问都只是对应到了使用端口80的Web程序(默认的)。

如果我们要访问81端口的应用程序只能使用:

www.xxxxxx.com:81或者

play.xxxxxx.com:81。

但是这样很不方便。我们要把端口去掉也能访问就需要使用Nginx做映射。

我们期望manhua.xxxxxx.com访问3001端口,xiaoshuo.xxxxxx.com访问3002端口。那么可以设置如下:

这里的3002和3001容器对外的端口号

vi /app/nginx/conf.d/default.conf
# 复制下面的并粘贴上去


server
{
    listen 80;
    server_name manhua.xxxxxx.com
    location / {
        #....
        proxy_pass 宿主机ip:容器对外的端口号;
    }
    ##### other directive
}

server
{
    listen 80;
    server_name xiaoshuo.xxxxxx.com
    location / {
        #....
        proxy_pass http://localhost:3002;
    }
    ##### other directive
}

这样设置就可以了。把3001和3002都映射到80端口的监听。

301跳转

我们留意到生活中很多时候不带www也能访问到某个网站,这也能通过Nginx实现。跟上面的配置一样,再增加一个server如下:

vi /app/nginx/conf.d/default.conf
# 复制下面的并粘贴上去

server
{
    listen 80;
    server_name  525.life;
    location / {
        #....
        proxy_pass http://localhost:8880;
    }
    ##### other directive
}


//或者进行301跳转

server
{
    listen 80;
    server_name 525.life;
    rewrite ^/(.*) http://www.525.life/$1 permanent;
}

添加404网页

添加404网页,都可又直接在里面添加,如:

server
{
listen 80;
server_name www.xxxxxx.com; #绑定域名
error_page 404 /404.html;
} 
禁止IP直接访问

最后还有一个方法需要注意,可能有需要禁止IP直接访问80端口或者禁止非本站的域名绑定我们的IP,这样的话应该
如下处理,放到最前一个server上面即可:

server{
listen 80 default;
server_name _;
return 403;
}
配置反向代理

现在我们就可以来设置nginx反向代理了, 其实也非常的简单, 直接在它的配置文件下创建一个.conf 的配置就可以了.

vi /app/nginx/conf.d/default.conf
# 复制下面的并粘贴上去

server {
    listen 80;
    server_name 域名;    # 把域名替换成你自己的
    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 http://ip:port;      # 这里设置你要代理的ip+端口
      }
}


一个现成的案例 (Nginx配置文件)

server {
    listen       80;
    server_name  play.xxxxxx.com;

    location / {
        root   /usr/share/nginx/html/;
        index  index.html index.htm;
    }
}

server {
    listen       80;
    server_name  search.xxxxxx.com;

    location / {
        root   /usr/share/nginx/html/search/dist;
        index  index.html index.htm;
    }
}

server {
    listen       80;
    server_name  kids.xxxxxx.com;

    location / {
        root   /usr/share/nginx/html/kids;
        index  index.html index.htm;
    }
}

server {
    listen       80;
    server_name  english.xxxxxx.com;

    location / {

       proxy_pass http://47.1.1.1:7000;  #宿主机ip:容器对外的端口号

    }

    }
}
拷贝
docker cp nginx:/etc/nginx/nginx.conf ./nginx.conf
声明

文中的地址都为编造,请替换成自己的地址

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值