【051】利用nginx的官方Docker镜像建立自动区分手机和PC的静态资源服务器

本文介绍如何在Ubuntu 14.04上配置Nginx服务器,包括创建目录结构、编写配置文件以及启动容器的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文是在Linux ubuntu14.04操作系统上做的配置。
所有的文件都是UTF-8编码,换行符使用了Linux的形式。即只有换行符,而区别于Windows使用的回车换行符。
首先利用mkdir命令,建立下面几个目录:
/zhangchao/nginx/config 存放nginx配置文件的目录
/zhangchao/nginx/projects/pc 存放网站PC版的前端文件
/zhangchao/nginx/projects/mobile 存放网站手机版的前端文件

在 /zhangchao/nginx/config 下新建一个文件,命名为nginx.conf。
下面是nginx.conf的内容:


user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
worker_rlimit_nofile 100000;


events {
    worker_connections  2048;
    multi_accept on;
}


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

    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;
    #gzip  on;

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

    server_tokens off;
    tcp_nopush on;
    tcp_nodelay on;
    access_log off;
    error_log /var/log/nginx/error.log crit;
    keepalive_timeout 10;
    client_header_timeout 10;
    client_body_timeout 10;
    reset_timedout_connection on;
    send_timeout 10;
    limit_conn_zone $binary_remote_addr zone=addr:5m;
    limit_conn addr 100;
    charset UTF-8;
    gzip on;
    gzip_disable "msie6";
    gzip_proxied any;
    gzip_min_length 1000;
    gzip_comp_level 6;
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
    open_file_cache max=100000 inactive=20s;
    open_file_cache_valid 30s;
    open_file_cache_min_uses 2;
    open_file_cache_errors on;
    include /etc/nginx/sites-enabled/*;

    server {
        listen 80;
        server_name 192.42.41.54;
        error_page  404              http://121.42.41.54/404.html;
        access_log  /zhanchao/nginx/projects/pc/access.log;
        location / {
            root /zhanchao/nginx/projects/pc;
            if ( $http_user_agent ~ "(MIDP)|(WAP)|(UP.Browser)|(Smartphone)|(Obigo)|(Mobile)|(AU.Browser)|(wxd.Mms)|(WxdB.Browser)|(CLDC)|(UP.Link)|(KM.Browser)|(UCWEB)|(SEMC-Browser)|(Mini)|(Symbian)|(Palm)|(Nokia)|(Panasonic)|(MOT-)|(SonyEricsson)|(NEC-)|(Alcatel)|(Ericsson)|(BENQ)|(BenQ)|(Amoisonic)|(Amoi-)|(Capitel)|(PHILIPS)|(SAMSUNG)|(Lenovo)|(Mitsu)|(Motorola)|(SHARP)|(WAPPER)|(LG-)|(LG/)|(EG900)|(CECT)|(Compal)|(kejian)|(Bird)|(BIRD)|(G900/V1.0)|(Arima)|(CTL)|(TDG)|(Daxian)|(DAXIAN)|(DBTEL)|(Eastcom)|(EASTCOM)|(PANTECH)|(Dopod)|(Haier)|(HAIER)|(KONKA)|(KEJIAN)|(LENOVO)|(Soutec)|(SOUTEC)|(SAGEM)|(SEC-)|(SED-)|(EMOL-)|(INNO55)|(ZTE)|(iPhone)|(Android)|(Windows CE)|(Wget)|(Java)|(curl)|(Opera)" )
            {
                root /zhanchao/nginx/projects/mobile;
            }
            index index.html;
        }
    }
}


PC版和手机版的目录里面都要放入一个404.html文件,用来显示404错误提示信息。

PC版和手机版的目录里面都要保证存在一个index.html文件作为入口文件。由于PC和手机屏幕的差异,前端需要分别设计两个不同页面,所以放在两个不同的目录里面。下面是本例子中的index.html内容,因为仅仅是作为演示,所以只有提示是PC和手机的字符。

如果用户只是想要使用IP来访问网站的话,把Server对象里面的 server_name 设置成Docker宿主机的IP。这里假设IP是192.42.41.54。

PC index.html

<html>
    <head>
        <title>aaaaaaa</title>
    </head>
    <body>
        PC电脑
    </body>
</html>

手机 index.html

<html>
    <head>
        <title>aaaaaaa</title>
    </head>
    <body>
        mobile
    </body>
</html>

最后用nginx官方镜像建立容器:

docker run --name nginx-a \
-v /zhanchao/nginx/config/nginx.conf:/etc/nginx/nginx.conf:ro \
-v /zhanchao/nginx/projects/pc:/zhanchao/nginx/projects/pc \
-v /zhanchao/nginx/projects/mobile:/zhanchao/nginx/projects/mobile \
-p 80:80 -d nginx:latest
Nginx是用于HTTP,HTTPS,SMTP,POP3IMAP协议的开源反向代理服务器,以及负载平衡器,HTTP缓存Web服务器(原始服务器)。Nginx项目一开始就非常关注高并发,高性能低内存使用。它获得了两节式BSD许可,并在Linux,BSD变体,Mac OS X,Solaris,AIX,HP-UX以及其他* nix版本上运行。它还具有用于Microsoft Windows的概念证明口。 托管一些简单的静态内容 $ docker run --name some-nginx -v /some/content:/usr/share/nginx/html:ro -d nginx 或者,Dockerfile可以使用简单的方法来生成包含必要内容的新图像(这比上面的绑定安装要干净得多): FROM nginx COPY static-html-directory /usr/share/nginx/html 将此文件放置在与目录相同的目录中(“ static-html-directory”),运行docker build -t some-content-nginx .,然后启动容器: $ docker run --name some-nginx -d some-content-nginx 暴露外部口 $ docker run --name some-nginx -d -p 8080:80 some-content-nginx 然后,您可以在浏览器中点击http://localhost:8080或http://host-ip:8080。 复杂的配置 $ docker run --name my-custom-nginx-container -v /host/path/nginx.conf:/etc/nginx/nginx.conf:ro -d nginx 有关nginx配置文件的语法的信息,请参阅官方文档(特别是《入门指南》)。 如果您希望采用默认配置,请使用以下类似内容从运行的nginx容器中复制它: $ docker run --name tmp-nginx-container -d nginx $ docker cp tmp-nginx-container:/etc/nginx/nginx.conf /host/path/nginx.conf $ docker rm -f tmp-nginx-container 也可以使用简单的Dockerfile(在中/host/path/)更干净地完成此操作: FROM nginx COPY nginx.conf /etc/nginx/nginx.conf 如果您CMD在Dockerfile中添加了自定义,请确保将包含-g daemon off;在其中CMD,以使nginx保持在前台,以便Docker可以正确跟踪进程(否则您的容器将在启动后立即停止)! 然后使用构建图像docker build -t custom-nginx .并按如下所示运行它: $ docker run --name my-custom-nginx-container -d custom-nginxNginx配置中使用环境变量 现成的nginx不支持大多数配置块中的环境变量。但是,envsubst如果您需要在nginx启动之前动态生成nginx配置,则可以将其用作解决方法。 这是使用docker-compose.yml的示例: web: image: nginx volumes: - ./mysite.template:/etc/nginx/conf.d/mysite.template ports: - "8080:80" environment: - NGINX_HOST=foobar.com - NGINX_PORT=80 command: /bin/bash -c "envsubst /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'" mysite.template然后,该文件可能包含如下变量引用: listen ${NGINX_PORT}; 在只读模式下运行Nginx 要以只读模式运行nginx,您需要将Docker卷安装到nginx写入信息的每个位置。默认的nginx配置需要对/var/cache的写权限/var/run。可以通过如下运行nginx轻松地完成此操作: $ d
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值