Nginx(发音为“engine-x”)是一款功能强大的开源反向代理服务器,支持HTTP、HTTPS、SMTP、POP3、IMAP等协议。它也可以作为负载均衡器、HTTP缓存或Web服务器。Nginx一开始就专注于高并发和高性能的应用场景。它使用类BSD开源协议,支持Linux、BSD、Mac、Solaris、AIX等类Unix系统,同时也有Windows上的移植版本。 Nginx特性如下:
热部署:采用master管理进程和worker工作进程的分离设计,支持热部署。在不间断服务的前提下,可以直接升级版本。也可以在不停止服务的情况下修改配置文件,更换日志文件等。高并发连接:Nginx可以轻松支持超过100K的并发,理论上支持的并发连接上限取决于机器内存。低内存消耗:在一般的情况下,10K个非活跃的HtTP Keep-Alive 连接在Nginx中仅消耗2.5MB的内存,这也是Nginx支持高并发连接的基础。响应快:在正常的情况下,单次请求会得到更快的响应。在高峰期,Nginx可以比其他的Web服务器更快地响应请求。高可靠性:Nginx是一个高可信的Web服务器。这也是为什么用户选择Nginx的基本条件,高可信来自其核心框架代码的优秀设计和实现。可以使用docker run 指令直接运行官方Nginx 镜像:
$ docker run -d -p 80:80 --name webserver nginx $ docker ps1.9.8版本后的镜像支持debug模式,镜像包含nginx-debug,可以支持更丰富的log信息:
$ docker run --name my-nginx -v /host/path/nginx.conf:/etc/nginx/nginx.conf:ro -d nginx nginx-debug -g 'daemon off;' # 相应的docker-compose.yml配置如下: web: image: nginx volumes: - ./nginx.conf:/etc/nginx/nginx.conf:ro command: [nginx-debug,'-g','daemon off;']自定义Web页面,首先,新建index.html文件,内容如下:
<html> <title>text</title> <body> <div> hello world </div> </body> </html>然后使用docker [container] run 指令运行,并将index.html文件挂载至容器中,即可看到显示的自定义页面
$ mkdir -p ~/nginx/html $ cd ~/nginx/html $ vim index.html $ docker run --name nginx-container -p 80:80 -v ~/nginx/html:/usr/share/nginx/html:ro -d nginx也可以使用Dockerfile来构建新镜像,如下
FROM nginx COPY ./index.html /usr/share/nginx/html $ docker build -t my-nginx . $ docker run --name nginx-container -d my-nginx1、定义Dockerfile 文件
# 设置继承自创建的sshd镜像 FROM myubuntu:myssh # 创建者的基本信息 MAINTAINER kevin<kevin@163.com> # 安装nginx,设置nginx以非daemon方式启动 RUN apt-get -y install nginx && apt-get clean && 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 # 添加用户的脚本,并设置权限,这会覆盖之前放在这个位置的脚本 COPY start_nginx.sh /start_nginx.sh RUN chmod 755 /*.sh # 定义可以被挂载的目录,分别是虚拟主机的挂载目录,证书目录,配置目录和日志目录 VOLUME ["/etc/nginx/sites-enable", "/etc/nginx/certs", "/etc/nginx/conf.d", "/var/log/nginx"] # 定义工作目录 WORKDIR /etc/nginx # 定义执行的命令 CMD ["/start_nginx.sh"] # 定义输出的端口 EXPOSE 80 EXPOSE 4432、start_nginx.sh脚本内容如下:
#!/bin/bash /usr/sbin/sshd & /usr/sbin/nginx3、创建镜像
$ docker build -t nginx:stable .4、测试,启动容器
$ docker run --name mynginx -d -P nignx:stable $ docker ps为了能充分发挥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 kerner.core.uses_pid = 1 net.ipv4.tcp_syncookies = 1 kernel.ms-nb = 65536 kernel.ms-ax = 65536 kernel.shmmax = 68719476736 kerner.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 65000Nginx的相关资源如下: Nginx官网:https://www.nginx.com Nginx官方仓库:https://github.com/nginx/nginx Nginx镜像:https://hub.docker.com/_/nginx/ Nginx镜像仓库:https://github.com/nginxinc/docker-nginx