Docker技术入门与实战【1.9】
第11章 Web服务器与应用
Web服务(Web Service)和Web应用(Web App)是目前互联网领域的热门技术。
本章将重点介绍如何使用Docker来运行常见的Web服务器(包括Apache、Nginx、Tomcast、Weblogic),以及一些常用应用(包括LAMP和CMS)。包括Docker镜像的构建方法与使用。
本章会继续展示使用前一章介绍的两种方法(通过docker commit命令,以及通过Dockerfile)来创建镜像的过程。其中一些操作比较简单的镜像使用Dockerfile来创建,而像Weblogic这样复杂的应用,则使用commit方式来创建,读者也可以根据自己的需求选择其他方式。
通过本章的介绍,用户将可以根据自己的需求轻松定制Web服务或Web应用镜像。
11.1 Apache
Apache是目前世界使用排名第一的Web服务器软件。由于其良好的跨平台和安全性,Apache被广泛应用在多种平台和操作系统上。Apache(阿帕奇)的名字源自美国的西南部一个印第安人部落:阿帕奇族。
这里将展示笔者使用Dockerfile来创建带Apache服务的Docker镜像的具体过程。
准备工作
首先,创建一个apache_ubuntu工作目录,在其中创建Dockerfile文件、run.sh文件和sample目录。
$ mkdir apache_ubuntu && cd apache_ubuntu
$ touch Dockerfile run.sh
$ mkdir sample
下面是Dockerfile的内容和各个部分的说明:
FROM sshd:dockerfile
#设置继承自我们创建的sshd镜像
MAINTAINER waitfish from dockerpool.com(dwj_zz@163.com)
#创建者的基本信息
#设置环境变量, 所有操作都是非交互式的
ENV DEBIAN_FRONTEND noninteractive
#安装
RUN apt-get -yq install apache2&&\
rm -rf /var/lib/apt/lists/*
RUN echo "Asia/Shanghai" > /etc/timezone && \
dpkg-reconfigure -f noninteractive tzdata
#注意这里要更改系统的时区设置, 因为在Web应用中经常会用到时区这个系统变量, 默认的ubuntu会让你的应用程序发生不可思议的效果哦
# 添加我们的脚本, 并设置权限, 这会覆盖之前放在这个位置的脚本
ADD run.sh /run.sh
RUN chmod 755 /*.sh
# 添加一个示例的Web站点, 删掉默认安装在apache文件夹下面的文件, 并将我们添加的示例用软链接链到/var/www/html目录下面
RUN mkdir -p /var/lock/apache2 &&mkdir -p /app && rm -fr /var/www/html && ln -s /app /var/www/html
COPY sample/ /app
# 设置apache相关的一些变量, 在容器启动的时候可以使用-e参数替代
ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apache2
ENV APACHE_PID_FILE /var/run/apache2.pid
ENV APACHE_RUN_DIR /var/run/apache2ENV APACHE_LOCK_DIR /var/lock/apache2
ENV APACHE_SERVERADMIN admin@localhost
ENV APACHE_SERVERNAME localhost
ENV APACHE_SERVERALIAS docker.localhost
ENV APACHE_DOCUMENTROOT /var/www
EXPOSE 80
WORKDIR /app
CMD ["/run.sh"]
这个sample站点的内容很简单,就输出一句话Hello Docker!。在sample目录下创建index.html文件,内容为:
<!DOCTYPE html>
<html>
<body>
<p>Hello, Docker!</p>
</body>
</html>
run.sh脚本内容也很简单,只是启动Apache服务:
$ cat run.sh
#!/bin/bash
exec apache2 -D FOREGROUND
此时,apache_ubuntu目录下面的文件结构为:
$ tree .
.|
-- Dockerfile
|-- run.sh
`-- sample
`-- index.html
1 directory, 3 files
创建apache:ubuntu镜像
使用docker build命令创建apache:ubuntu镜像,注意命令最后的“.”:
$ sudo docker build -t apache:ubuntu .
Sending build context to Docker daemon 6.144 kB
Sending build context to Docker daemon
Step 0 : FROM sshd:dockerfile
---> 570c26a9de68
Step 1 : MAINTAINER waitfish from dockerpool.com(dwj_zz@163.com)
---> Using cache
---> 5c6b90057a1d
Step 2 : ENV DEBIAN_FRONTEND noninteractive
---> Using cache
---> e06feb0790d7
Step 3 : RUN apt-get -yq install apache2&& rm -rf /var/lib/apt/lists/*
---> Using cache
---> 54e5665500b9
Step 4 : RUN echo "Asia/Shanghai" > /etc/timezone && dpkg-reconfigure -f noninteractive tzdata
---> Running in 8c1ad26742bc
Current default time zone: 'Asia/Shanghai'
Local time is now: Mon Oct 27 20:19:19 CST 2014.
Universal Time is now: Mon Oct 27 12:19:19 UTC 2014.
---> 04d64839c7b3
Removing intermediate container 8c1ad26742bc
Step 5 : ADD run.sh /run.sh
---> f995bd0d6f89
Removing intermediate container f372648d02d9
Step 6 : RUN chmod 755 /*.sh
---> Running in ae60847251c8
---> 2e0a58be0f9c
Removing intermediate container ae60847251c8
Step 7 : RUN mkdir -p /var/lock/apache2 &&mkdir -p /app && rm -fr /var/www/html && ln -s /app /var/www/html
---> Running in d5355f5e2992
---> 6e96f581ee0d
Removing intermediate container d5355f5e2992
Step 8 : COPY sample/ /app
---> c048a78c17fd
Removing intermediate container 2461604081e3
Step 9 : ENV APACHE_RUN_USER www-data
---> Running in c9c6c12d1982
---> 5cd772b48df2
Removing intermediate container c9c6c12d1982
Step 10 : ENV APACHE_RUN_GROUP www-data
---> Running in b179ff1391c8
---> 47d9b17eaec3
Removing intermediate container b179ff1391c8
Step 11 : ENV APACHE_LOG_DIR /var/log/apache2
---> Running in a3daf191e6b2
---> 8d56f68dbfc6
Removing intermediate container a3daf191e6b2
Step 12 : ENV APACHE_PID_FILE /var/run/apache2.pid
---> Running in 92401ab1dbee
---> 27f2ddba296e
Removing intermediate container 92401ab1dbee
Step 13 : ENV APACHE_RUN_DIR /var/run/apache2
---> Running in 76c6e7401eca
---> 6d0e7acaf398
Removing intermediate container 76c6e7401eca
Step 14 : ENV APACHE_LOCK_DIR /var/lock/apache2
---> Running in a9c46477ebe9
---> 1f352c6d2635
Removing intermediate container a9c46477ebe9
Step 15 : ENV APACHE_SERVERADMIN admin@localhost
---> Running in 3d0d8506856c
---> 679d9964bb34
Removing intermediate container 3d0d8506856c
Step 16 : ENV APACHE_SERVERNAME localhost
---> Running in 405884f45d23
---> 88f25f8e2609
Removing intermediate container 405884f45d23
Step 17 : ENV APACHE_SERVERALIAS docker.localhost
---> Running in 0528963fade4
---> 693cc00c91fe
Removing intermediate container 0528963fade4
Step 18 : ENV APACHE_DOCUMENTROOT /var/www
---> Running in 2c38a2ca6d14
---> d8649b79e085
Removing intermediate container 2c38a2ca6d14
Step 19 : EXPOSE 80
---> Running in cab9677d0756
---> 682d055d6f15
Removing intermediate container cab9677d0756
Step 20 : WORKDIR /app
---> Running in 641c59ded9da
---> 5b08d6572b75
Removing intermediate container 641c59ded9da
Step 21 : CMD /run.sh
---> Running in ee18331b3e69---> 1d865e3032d7
Removing intermediate container ee18331b3e69
Successfully built 1d865e3032d
此时镜像已经创建成功了。下面,查看本地已有的镜像列表,读者可见新增的apache:ubuntu镜像:
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
apache ubuntu 1d865e3032d7 46 seconds ago 263.8 MB
sshd dockerfile 570c26a9de68 9 hours ago 246.5 MB
sshd ubuntu 7aef2cd95fd0 21 hours ago 255.2 MB
debian latest 61f7f4f722fb 6 days ago 85.1 MB
busybox latest e72ac664f4f0 3 weeks ago 2.433 MB
ubuntu 14.04 ba5877dc9bec 3 months ago 192.7 MB
ubuntu latest ba5877dc9bec 3 months ago 192.7 MB
测试镜像
运行镜像,并使用-P参数映射需要开放的端口(22和80端口):
$ sudo docker run -d -P apache:ubuntu
64681e2ae943f18eae9f599dbc43b5f44d9090bdca3d8af641d7b371c124acfd
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
64681e2ae943 apache:ubuntu "/run.sh" 2 seconds ago Up 1 seconds 0.0.0.0:49171->22/tcp, 0.0.0.0:49172->80/tcp naughty_poincare
890c04ff8d76 sshd:dockerfile "/run.sh" 9 hours ago Exited (0) 3 hours ago 0.0.0.0:101->22/tcp high_albattani
3ad7182aa47f sshd:ubuntu "/run.sh" 21 hours ago Exited (0) 3 hours ago 0.0.0.0:100->22/tcp focused_ptolemy
在本地主机上用curl抓取网页来验证刚才创建的sample站点:
$ curl 127.0.0.1:49172
Hello Docker!
读者也可以在其他设备上通过访问宿主主机ip:49172来访问sample站点。
Dockerfile创建的镜像拥有继承的特性
不知道有没有细心的读者发现,在apache镜像的Dockerfile中只用EXPOSE定义了对外开放的80端口,而在sudo docker ps-a命令的返回中,却看到新启动的容器映射了两个端口:22和80。
但是实际上,当尝试使用SSH登录到容器时,会发现无法登录。
这是因为在run.sh脚本中并未启动SSH服务。
这说明在使用Dockerfile创建镜像时,会继承父镜像的开放端口,但却不会继承启动命令。因此,需要在run.sh脚本中添加启动sshd的服务的命令:
$ cat run.sh
#!/bin/bash
/usr/sbin/sshd &
exec apache2 -D FOREGROUND
再次创建镜像:
$ sudo docker build -t apache:ubuntu .
这次创建的镜像将默认会同时启动SSH和Apache服务。
映射本地目录
可以通过映射本地目录的方式来指定容器内Apache服务响应的内容,例如映射本地主机上当前目录下的www目录到容器内的/var/www目录:
$ sudo docker run -i -d -p 80:80 -p 103:22 -e APACHE_SERVERNAME=test -v `pwd`/www:/var/www:ro apache:ubuntu
在当前目录内创建www目录,并放上自定义的页面index.html,内容为:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>Hi Docker</title>
</head><body>
<h1>Hi Docker</h1>
<p>This is the first day I meet the new world.</p>
<p>How are you?</p>
<hr>
<address>Apache/2.4.7 (Ubuntu) Server at 127.0.0.1 Port 80</address>
</body></html>
在本地主机上可访问测试容器提供的Web服务,查看获取内容为新配置的index.html页面信息:
11.2 Nginx
Nginx是一个高性能的Web和反向代理服务器,它具有很多非常优越的特性:
·作为Web服务器:相比Apache,Nginx使用更少的资源,支持更多的并发连接,体现更高的效率,这点使Nginx尤其受到虚拟主机提供商的欢迎。一个Nginx实例能够轻松支持高达50000个并发连接数的响应。
·作为负载均衡服务器:Nginx既可以在内部直接支持Rails和PHP,也可以支持作为HTTP代理服务器对外进行服务。Nginx用C编写,不论是系统资源开销还是CPU使用效率都比Perlbal要好得多。
·作为邮件代理服务器:Nginx同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last.fm描述了成功并且美妙的使用经验。
·Nginx安装非常简单,配置文件非常简洁(还能够支持Perl语法),Bug非常少。Nginx启动特别容易,并且几乎可以做到7×24不间断运行,即使运行数个月也不需要重新启动。你还能够在不间断服务的情况下进行软件版本的升级。
本节将首先介绍Nginx官方发行版本的镜像生成,然后介绍在国内应用量众多的Nginx淘宝增强版——Tengine镜像的生成。
Nginx官方版本
由于使用Dockerfile生成镜像的步骤大多类似。为了节约篇幅,这里直接介绍使用的Dockerfile文件和需要的脚本文件,如果读者对使用Dockerfile创建镜像的步骤还有不清楚的地方,可以查看第一部分中关于Dockerfile的介绍章节和上一小节Apache镜像的创建过程。
1.Nginx Dockerfile
#设置继承自创建的sshd镜像
FROM sshd:dockerfile
#下面是一些创建者的基本信息
MAINTAINER waitfish from dockerpool.com(dwj_zz@163.com)
#安装nginx, 设置nginx以非daemon启动。
RUN \
apt-get install -y nginx && \
rm -rf /var/lib/apt/lists/* && \
echo "\ndaemon off;" >> /etc/nginx/nginx.conf && \
chown -R www-data:www-data /var/lib/nginx
RUN echo "Asia/Shanghai" > /etc/timezone && \
dpkg-reconfigure -f noninteractive tzdata
#注意这里要更改系统的时区设置, 因为在Web应用中经常会用到时区这个系统变量, 默认的ubuntu会让你的应用程序发生不可思议的效果哦
# 添加我们的脚本, 并设置权限, 这会覆盖之前放在这个位置的脚本
ADD run.sh /run.sh
RUN chmod 755 /*.sh
# 定义可以被挂载的目录, 分别是虚拟主机的挂载目录、 证书目录、 配置目录和日志目录
VOLUME ["/etc/nginx/sites-enabled", "/etc/nginx/certs", "/etc/nginx/conf.d", "/var/log/nginx"]
# 定义工作目录
WORKDIR /etc/nginx
# 定义输出命令
CMD ["/run.sh"]
# 定义输出端口
EXPOSE 80
EXPOSE 443
2.查看run.sh脚本文件内容
$ cat run.sh
#!/bin/bash
/usr/sbin/sshd &
/usr/sbin/nginx
3.创建镜像
使用docker build命令,创建镜像nginx:stable:
$ sudo docker build -t nginx:stable .
Sending build context to Docker daemon 4.096 kB
Sending build context to Docker daemon
Step 0 : FROM sshd:dockerfile
---> 570c26a9de68
Step 1 : MAINTAINER waitfish from dockerpool.com(dwj_zz@163.com)
---> Using cache
---> 5c6b90057a1d
Step 2 : RUN apt-get install -y nginx && rm -rf /var/lib/apt/lists/* && echo "\ndaemon off;" >> /etc/nginx/nginx.conf && chown -R www-data:www-data /var/lib/nginx
---> Using cache
---> 79149a429c7a
Step 3 : ADD run.sh /run.sh
---> ab72d235e438
Removing intermediate container 5c16bf1046aa
Step 4 : RUN chmod 755 /*.sh
---> Running in a0c0b0ec6bcc
---> 8d3262eaf1b8
Removing intermediate container a0c0b0ec6bcc
Step 5 : VOLUME /etc/nginx/sites-enabled /etc/nginx/certs /etc/nginx/conf.d /var/log/nginx
---> Running in 6966fb517eed
---> 3b64e8cb7119
Removing intermediate container 6966fb517eed
Step 6 : WORKDIR /etc/nginx
---> Running in 391a0b606082
---> 666fb7e351fe
Removing intermediate container 391a0b606082
Step 7 : CMD /run.sh
---> Running in 9f1e239daf52
---> e1c0b7bde8cf
Removing intermediate container 9f1e239daf52
Step 8 : EXPOSE 80
---> Running in 36d7b8f0e7cf
---> fccd40af3367
Removing intermediate container 36d7b8f0e7cf
Step 9 : EXPOSE 443
---> Running in 84095d6a71c2
---> 4e3936e36e31
Removing intermediate container 84095d6a71c2
Successfully built 4e3936e36e3
4.测试
启动容器,查看内部的80端口被映射到本地的49193端口:
$ sudo docker run -d -P nginx:stable
08c456536e69c8e36670f3bc6b496020e76d28fc9d33a8bcd01ff6d61bc72c4a
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
08c456536e69 nginx:stable "/run.sh" 8 seconds ago Up 8 seconds 0.0.0.0:49191->22/tcp, 0.0.0.0:49192->443/tcp, 0.0.0.0:49193->80/tcp
访问本地的49193端口:
$ curl 127.0.0.1:49193
返回Nginx的欢迎页面,说明Nginx已经正常启动了:
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title><style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
最后,为了能充分发挥Nginx的性能,可对系统内核参数做一些调整。
下面是一份常见的Nginx内核的优化参数:
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
net.ipv4.tcp_max_tw_buckets = 6000
net.ipv4.tcp_sack = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_rmem = 4096 87380 4194304
net.ipv4.tcp_wmem = 4096 16384 4194304
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.netdev_max_backlog = 262144
net.core.somaxconn = 262144
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_keepalive_time = 30
net.ipv4.ip_local_port_range = 1024 65000
Tengine镜像
1.Tengine Dockerfile
#设置继承自我们创建的sshd镜像
FROM sshd:dockerfile
#下面是一些创建者的基本信息
MAINTAINER waitfish from dockerpool.com(dwj_zz@163.com)
# Let the conatiner know that there is no tty
# 安装编译环境
RUN apt-get install -y build-essential debhelper make autoconf automake patch
RUN apt-get install -y dpkg-dev fakeroot pbuilder gnupg dh-make libssl-dev libpcre3-dev git-core
RUN echo "Asia/Shanghai" > /etc/timezone && \
dpkg-reconfigure -f noninteractive tzdata
#注意这里要更改系统的时区设置, 因为在Web应用中经常会用到时区这个系统变量, 默认的ubuntu会让你的应用程序发生不可思议的效果哦
#创建Nginx用户
RUN adduser --disabled-login --gecos 'Tengine' nginx
# tengine安装的shell脚本
WORKDIR /home/nginx
RUN su nginx -c 'git clone https://github.com/alibaba/tengine.git'
WORKDIR /home/nginx/tengine
RUN su nginx -c 'mv packages/debian .'
ENV DEB_BUILD_OPTIONS nocheck
RUN su nginx -c 'dpkg-buildpackage -rfakeroot -uc -b'
WORKDIR /home/nginx
RUN dpkg -i tengine_2.0.2-1_amd64.deb
# 定义挂载的目录
VOLUME ["/data", "/etc/nginx/sites-enabled", "/var/log/nginx"]
#让Nginx运行在排Daemon模式
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
# 定义工作目录
WORKDIR /etc/nginx
# 添加我们的脚本, 并设置权限, 这会覆盖之前放在这个位置的脚本
ADD run.sh /run.sh
RUN chmod 755 /*.sh
# 定义输出命令
CMD ["/run.sh"]
# 定义输出端口
EXPOSE 80
EXPOSE 443
2.查看run.sh脚本文件内容
$ cat run.sh
#!/bin/bash
/usr/sbin/sshd &
/usr/sbin/nginx
3.创建过程
$ sudo docker build -t nginx:albb .
4.测试
启动一个容器,并查看端口映射信息:
$ sudo docker run -d -P nginx:albb
ff4650e77c53b174a10b4cd29533deffad889458f88d98c4443ac3654b01552a
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESff4650e77c53 nginx:albb "/run.sh" 3 seconds ago Up 2 seconds 0.0.0.0:49194->443/tcp, 0.0.0.0:49195->80/tcp, 0.0.0.0:49196->22/tcp furious_wright
08c456536e69 nginx:stable "/run.sh" 13 minutes ago Up 13 minutes 0.0.0.0:49191->22/tcp, 0.0.0.0:49192->443/tcp, 0.0.0.0:49193->80/tcp romantic_curie
ffd58545b787 apache:ubuntu "/run.sh" About an hour ago Up About an hour 0.0.0.0:49177->22/tcp, 0.0.0.0:49178->80/tcp jovial_galileo
访问本地的49195端口进行测试:
$ curl 127.0.0.1:49195
返回的内容是淘宝版本的Nginx特有的页面:
<!DOCTYPE html>
<html>
<head>
<title>Welcome to tengine!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to tengine!</h1>
<p>If you see this page, the tengine web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://tengine.taobao.org/">tengine.taobao.org</a>.</p>
<p><em>Thank you for using tengine.</em></p>
</body>
</html>
5.进入容器查看创建的容器信息
可以使用docker exec命令进入刚启动的Tengine容器,查看建立容器后默认运行的进程和默认映射的端口:
$ sudo docker exec -ti ff4 /bin/bash
root@ff4650e77c53:/etc/nginx# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 15:09 ? 00:00:00 /bin/bash /run.sh
root 11 1 0 15:09 ? 00:00:00 nginx: master process /usr/sbin/nginx
nginx 12 11 0 15:09 ? 00:00:00 nginx: worker process
root 13 1 0 15:09 ? 00:00:00 /usr/sbin/sshd
root 14 0 1 15:09 ? 00:00:00 /bin/bash
root 23 14 0 15:09 ? 00:00:00 ps -ef
root@ff4650e77c53:/etc/nginx# netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp6 0 0 :::22 :::* LISTEN -
查看Tengine的编译参数和模块特性:
root@ff4650e77c53:/etc/nginx# nginx -V
Tengine version: Tengine/2.0.3 (nginx/1.6.1)
built by gcc 4.8.2 (Ubuntu 4.8.2-19ubuntu1)
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log
loaded modules:
ngx_core_module (static)
ngx_errlog_module (static)
ngx_conf_module (static)
ngx_dso_module (static)
ngx_syslog_module (static)
ngx_events_module (static)
ngx_event_core_module (static)
ngx_epoll_module (static)
ngx_procs_module (static)
ngx_proc_core_module (static)
ngx_openssl_module (static)
ngx_regex_module (static)
ngx_http_module (static)
ngx_http_core_module (static)
ngx_http_log_module (static)
ngx_http_upstream_module (static)
ngx_http_spdy_module (static)
ngx_http_static_module (static)
ngx_http_gzip_static_module (static)
ngx_http_dav_module (static)
ngx_http_autoindex_module (static)
ngx_http_index_module (static)
ngx_http_random_index_module (static)
ngx_http_auth_basic_module (static)
ngx_http_access_module (static)
ngx_http_limit_conn_module (static)
ngx_http_limit_req_module (static)
ngx_http_realip_module (static)
ngx_http_geo_module (static)
ngx_http_map_module (static)
ngx_http_split_clients_module (static)
ngx_http_referer_module (static)
ngx_http_rewrite_module (static)
ngx_http_ssl_module (static)
ngx_http_proxy_module (static)
ngx_http_fastcgi_module (static)
ngx_http_uwsgi_module (static)
ngx_http_scgi_module (static)
ngx_http_memcached_module (static)
ngx_http_empty_gif_module (static)
ngx_http_browser_module (static)
ngx_http_user_agent_module (static)
ngx_http_secure_link_module (static)
ngx_http_flv_module (static)
ngx_http_mp4_module (static)
ngx_http_upstream_ip_hash_module (static)
ngx_http_upstream_consistent_hash_module (static)
ngx_http_upstream_check_module (static)
ngx_http_upstream_least_conn_module (static)
ngx_http_reqstat_module (static)
ngx_http_upstream_keepalive_module (static)
ngx_http_upstream_dynamic_module (static)
ngx_http_stub_status_module (static)
ngx_http_write_filter_module (static)
ngx_http_header_filter_module (static)
ngx_http_chunked_filter_module (static)
ngx_http_spdy_filter_module (static)
ngx_http_range_header_filter_module (static)
ngx_http_gzip_filter_module (static)
ngx_http_postpone_filter_module (static)
ngx_http_ssi_filter_module (static)
ngx_http_charset_filter_module (static)
ngx_http_sub_filter_module (static)
ngx_http_addition_filter_module (static)ngx_http_gunzip_filter_module (static)
ngx_http_userid_filter_module (static)
ngx_http_footer_filter_module (static)
ngx_http_trim_filter_module (static)
ngx_http_headers_filter_module (static)
ngx_http_upstream_session_sticky_module (static)
ngx_http_copy_filter_module (static)
ngx_http_range_body_filter_module (static)
ngx_http_not_modified_filter_module (static)
ngx_mail_module (static)
ngx_mail_core_module (static)
ngx_mail_ssl_module (static)
ngx_mail_pop3_module (static)
ngx_mail_imap_module (static)
ngx_mail_smtp_module (static)
ngx_mail_auth_http_module (static)
ngx_mail_proxy_module (static)
root@ff4650e77c53:/etc/nginx#
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)