SlideShare a Scribd company logo
1 of 55
NGINX 101
Now with
more Docker
Core NGINX functionality includes HTTP
request, proxy and caching services which
can be combined into a complete application
delivery platform. Or, as we like to think of
it….
The origins
NGINX development began at Rambler.ru by
Igor Sysoev to solve c10k problem
• High concurrency
• Low memory use
• 2002 commodity hardware
High Concurrency
Source: Webfaction Blog: http://blog.webfaction.com/2008/12/a-little-holiday-present-10000-reqssec-with-nginx-2/
Low Memory Use
Source: Webfaction Blog: http://blog.webfaction.com/2008/12/a-little-holiday-present-10000-reqssec-with-nginx-2/
Learn more at nginx.com
Apache is like Microsoft
Word, it has a million options
but you only need six. Nginx
does those six things, and it
does five of them 50 times
faster than Apache.
- Chris Lea
1. What functionality do you require?
• Standard modules
• NGINX Plus functionality
• Optional NGINX and third-party
modules
3. How do you want to install?
• “Official” NGINX packages (nginx.org)
• Build from Source
• From Operating System repository
• From AWS or Azure Marketplaces
• From Docker Hub Registry
2. What branch do you want to
track?
• Mainline (1.7)
• Stable (1.6)
• Something older?
http://nginx.com/blog/nginx-1-6-1-7-released/
Questions before you begin
$ wget http://nginx.org/keys/nginx_signing.key
$ sudo apt-key add nginx_signing.key
# cat > /etc/apt/sources.list.d/nginx.list
deb http://nginx.org/packages/mainline/ubuntu/ trusty nginx
deb-src http://nginx.org/packages/mainline/ubuntu/ trusty nginx
# apt-get update
# apt-cache policy nginx
nginx:
Installed: (none)
Candidate: 1.7.0-1~trusty
Version table:
1.7.0-1~trusty 0
500 http://nginx.org/packages/mainline/ubuntu/ trusty/nginx amd64 Packages
1.4.6-1ubuntu3 0
500 http://us.archive.ubuntu.com/ubuntu/ trusty/main amd64 Packages
Traditional Installation
http://nginx.org/en/linux_packages.html#mainline
Verify it’s working
# /etc/init.d/nginx status
* nginx is running
# /usr/sbin/nginx –v
nginx version: nginx/1.7.0
The basics of the install
Where are the things
• NGINX executable is at /usr/sbin/nginx
• Configuration files at /etc/nginx
• Log files at /var/log/nginx
NGINX processes
• One master process and many worker
processes
• The master process evaluates the
configuration file and manages the worker
processes
• Worker processes handle actual requests
[root@localhost ~]# ps -ef |grep nginx
root 1991 1 0 08:06 ? 00:00:00 nginx: master
process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx 2974 1991 0 08:22 ? 00:00:00 nginx: worker
process
nginx 2975 1991 0 08:22 ? 00:00:00 nginx: worker
process
Basic NGINX commands
• To start NGINX, simply run the executable file
at /usr/sbin/nginx
• The executable can be run with a “-s”
parameter followed by a signal.
Reload configuration
nginx –s reload
Graceful shutdown. NGINX will wait for workers to finish processing requests
nginx –s quit
Fast shutdown
nginx –s stop
The NGINX configuration file
• The configuration file determines how NGINX
and its modules behave
• The main file is named nginx.conf and is
located in /etc/nginx
• The main configuration file may include
references to additional configuration files
• Configuration consists of
– Directives
– Blocks
– Contexts
Configuration directives
Directives
• Consists of the directive name, followed by
parameters and ends in a semicolon
• Two types of directives
– Simple directive
– Block directive
A Directive is a configuration statement that controls the
behaviour of NGINX modules
Block Directives
A Block Directive is a directive that contains multiple
configuration instructions
• The configurations instructions inside a block
directive are surrounded by braces (i.e { } )
Context example
• Example of a
Server context,
which has two
location blocks
• The server
context here can
also be referred
to as a server
block
Specify the Server Block
• Goes inside the HTTP context
• Can contain a listen directive, server_name
directive and root directive
• Can specify many server blocks
• Equivalent to VirtualHost in Apache
The Server block defines the configuration for a virtual
server
Specify the Server Block
• NGINX will choose which server to process a
request based on the server name and the
listen port
The Server block defines the configuration for a virtual
server
Define a virtual server that listens for requests on port 80
http {
server {
listen 80;
}
}
Location Block
• Placed inside a server block
• Server block can contain many location blocks
• Can contain a Root directive, which will override
the Root directive of the server
• Can be nested inside a location block
• Two types of location blocks
Prefix location + Regex location
• The location block defines the configuration that will
apply based on a matching request URI
Example Server and Location
• Root directive sets the root directory for a
request.
• A request to localhost:8080 will return the
• index.html file in /home/nginx/public_html
server {
listen 8080;
root /home/nginx/public_html;
location /application1 {
}
location /images/ {
root /data;
}
}
The Include directive
• The include directive allows you to include
additional configuration files
• Syntax: include <path to file>;
• Best Practices:
– For each server, create a separate
configuration file in /etc/nginx/conf.d
– nginx.conf includes all files in the conf.d folder
ending in .conf by default
Defining server names
• Use the server_name directive in the server
context to define the names for your server
server {
server_name mycompany.com *.mycompany.com;
}
Simple Proxy Scenario
• Server one listening for requests on port
80 and serves content from
/home/nginx/public_html
• Server two listens on port 8080 and
serves content from /data/proxy
• Requests for localhost are proxied over to
the server on port 8080
Simple Proxy Scenario
Logging
• The error_log directive can be used to configure
the logging settings
• Syntax:
error_log <file> <log level>;
• Can be used in the main, server, http and location
contexts
• The Log level specifies how detailed the log output
will be
Example
error_log logs/error.log info;
Logging best practices
• Should keep a separate error log file for
each server
• Helps to reduce size of each log file and
makes troubleshooting easier
server {
server_name server1.com;
root /data/server1.com;
error_log logs/server1.error.log info;
}
server {
server_name server2.com
root /data/server2.com;
error_log logs/server2.error.log info;
}
Proxying to the upstream block
Specifying server priorities
• By default, all servers defined in the
upstream block are treated with equal priority
• Use the weight parameter to indicate a
higher or lower weighting for a particular
server
upstream myServers {
server backend.server1 weight=5
server backend.server2 weight=3
server backend.server3 weight=2
}
Reverse proxy and caching
• It’s common to use NGINX in front of
another web or application server
• NGINX can handle serving all the static
content, while requests for dynamic
content such as php are proxied to the
application server
• Static content can then be cached to
improve performance
Defining the cache path
http {
proxy_cache_path /var/cache/nginx levels=1:2
keys_zone=server-cache:8m max_size=1000m
inactive=600m;
proxy_temp_path /tmp/nginx;
• proxy_cache_path directive to set where to store
cached content
• proxy_temp_path directive tells NGINX where to
store temporary data which is used to build the
cache
• Both directives must be placed in HTTP context
Defining the cache path
• proxy_cache_path parameters
– keys_zone parameter specifies the name and
size of the cache
– max_size parameter specifies the maximum
size of the cache
– Inactive parameter specifies how long
cached data is kept for if not accessed
Configuring the proxy cache
• proxy_cache_key directive specifies to use the
hostname/subdomain/domain and request URI as the
key
• proxy_cache directive defines the shared memory zone
used for caching.
– Name specified must match the name of the cache
defined in the proxy_cache_path directive
Location / {
proxy_pass http://application.com:8080;
proxy_cache_key “$scheme$host$request_uri”;
proxy_cache server-cache;
proxy_chache_valid 1m;
proxy_cache_valid 404 1m;
]
Passing headers
• Use proxy_set_header directive to redefine the
request header fields that are passed to the
proxied server
• Use this to pass on the hostname and IP address
of the request machine
• Without setting the headers, the server you proxy
to will simply see your reverse proxy server’s host
and IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
Configuring a HTTPS server
• Enable SSL by specifying the SSL
parameter on the listen directive
• Specify the path of your SSL server
certificate and private key
server {
listen 443 ssl;
server_name training.secure.com;
error_log logs/secure.error.log;
ssl_certificate /etc/nginx/certs/nginxtraining.crt
ssl_certificate_key /etc/nginx/certs/nginxtraining.key
]
SSL session cache
• SSL sessions can be stored in a cache and
reused in order to avoid having to perform a
“handshake” as part of subsequent
connections
• Reduces the amount of CPU intensive
operations on the server
• The session cache can be shared between
workers
• Cache will timeout after 5 minutes by default,
but this can be configured with the
ssl_session_timeout directive
Session cache example
• Syntax
ssl_session_cache shared:<name>:size;
• Size is specified in bytes or megabytes
• 1 MB can store around 4000 sessions
• Can specified in the http or server context
Example
http {
ssl_session_cache shared:ssl:10m;
ssl_session_timeout 10m;
server {
listen 443 ssl;
...
Now with
more Docker
registry.hub.docker.com
Dockerfile
FROM debian:wheezy
MAINTAINER NGINX Docker Maintainers "docker-maint@nginx.com"
RUN apt-key adv --keyserver pgp.mit.edu --recv-keys
573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62
RUN echo "deb http://nginx.org/packages/mainline/debian/ wheezy nginx" >>
/etc/apt/sources.list
ENV NGINX_VERSION 1.7.10-1~wheezy
RUN apt-get update && 
apt-get install -y ca-certificates nginx=${NGINX_VERSION} && 
rm -rf /var/lib/apt/lists/*
# forward request and error logs to docker log collector
RUN ln -sf /dev/stdout /var/log/nginx/access.log
RUN ln -sf /dev/stderr /var/log/nginx/error.log
VOLUME ["/var/cache/nginx"]
EXPOSE 80 443
CMD ["nginx", "-g", "daemon off;"]
$ docker run -P –d nginx
ff635ea2653c9489de7037b5c106a26d36f5907e4e75a43f47a3a38029a56b14
# docker ps
CONTAINER ID IMAGE COMMAND CREATED
STATUS PORTS NAMES
ff635ea2653c nginx:latest "nginx -g 'daemon of 16 seconds ago
Up 11 seconds 0.0.0.0:49153->443/tcp, 0.0.0.0:49154->80/tcp nginx-test
Run our Docker container
https://registry.hub.docker.com/_/nginx/
$ docker@52.10.213.150 ~: docker run -it nginx /bin/bash
root@74d2a7e93244:/# more /etc/nginx/nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
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"’;
…
Exploring our Docker container
Extending base images in your Dockerfile
From @jpettazo’s Docker talk 20150220 #SCaLE13x
Your NGINX Dockerfile
FROM nginx
RUN rm /etc/nginx/conf.d/default.conf
RUN rm /etc/nginx/conf.d/example_ssl.conf
COPY static-html-directory /usr/share/nginx/html
COPY nginx.conf /etc/nginx/nginx.conf
http://nginx.com/blog/deploying-nginx-nginx-plus-docker/
• Fancier options i.e. more repeatable and scalable
– Defining VOLUMEs
– Using helper containers
– Linking containers
http://sarah.is/ExcitedAboutMicroservices
@sarahnovotny
Chief Evangelist, NGINX
Program Chair, OSCON
Thanks for your time!
NGINX 101 - now with more Docker
NGINX 101 - now with more Docker
NGINX 101 - now with more Docker
NGINX 101 - now with more Docker
NGINX 101 - now with more Docker
NGINX 101 - now with more Docker

More Related Content

What's hot

Nginx internals
Nginx internalsNginx internals
Nginx internalsliqiang xu
 
Extending functionality in nginx, with modules!
Extending functionality in nginx, with modules!Extending functionality in nginx, with modules!
Extending functionality in nginx, with modules!Trygve Vea
 
Learn nginx in 90mins
Learn nginx in 90minsLearn nginx in 90mins
Learn nginx in 90minsLarry Cai
 
NGINX: Basics & Best Practices - EMEA Broadcast
NGINX: Basics & Best Practices - EMEA BroadcastNGINX: Basics & Best Practices - EMEA Broadcast
NGINX: Basics & Best Practices - EMEA BroadcastNGINX, Inc.
 
High Availability Content Caching with NGINX
High Availability Content Caching with NGINXHigh Availability Content Caching with NGINX
High Availability Content Caching with NGINXNGINX, Inc.
 
Delivering High-Availability Web Services with NGINX Plus on AWS
Delivering High-Availability Web Services with NGINX Plus on AWSDelivering High-Availability Web Services with NGINX Plus on AWS
Delivering High-Availability Web Services with NGINX Plus on AWSNGINX, Inc.
 
Load Balancing Applications with NGINX in a CoreOS Cluster
Load Balancing Applications with NGINX in a CoreOS ClusterLoad Balancing Applications with NGINX in a CoreOS Cluster
Load Balancing Applications with NGINX in a CoreOS ClusterKevin Jones
 
What's New in NGINX Plus R12?
What's New in NGINX Plus R12? What's New in NGINX Plus R12?
What's New in NGINX Plus R12? NGINX, Inc.
 
Rate Limiting with NGINX and NGINX Plus
Rate Limiting with NGINX and NGINX PlusRate Limiting with NGINX and NGINX Plus
Rate Limiting with NGINX and NGINX PlusNGINX, Inc.
 
What's New in NGINX Plus R7?
What's New in NGINX Plus R7?What's New in NGINX Plus R7?
What's New in NGINX Plus R7?NGINX, Inc.
 
Apache Camel: Jetty Component With Example
Apache Camel: Jetty Component With ExampleApache Camel: Jetty Component With Example
Apache Camel: Jetty Component With ExampleAmit Aggarwal
 
Load Balancing with Nginx
Load Balancing with NginxLoad Balancing with Nginx
Load Balancing with NginxMarian Marinov
 
Lcu14 Lightning Talk- NGINX
Lcu14 Lightning Talk- NGINXLcu14 Lightning Talk- NGINX
Lcu14 Lightning Talk- NGINXLinaro
 
Introduction to Nginx
Introduction to NginxIntroduction to Nginx
Introduction to NginxKnoldus Inc.
 
Delivering High Performance Websites with NGINX
Delivering High Performance Websites with NGINXDelivering High Performance Websites with NGINX
Delivering High Performance Websites with NGINXNGINX, Inc.
 
Deploying NGINX Plus with Ansible
Deploying NGINX Plus with AnsibleDeploying NGINX Plus with Ansible
Deploying NGINX Plus with AnsibleKevin Jones
 

What's hot (20)

Nginx internals
Nginx internalsNginx internals
Nginx internals
 
Nginx Essential
Nginx EssentialNginx Essential
Nginx Essential
 
Extending functionality in nginx, with modules!
Extending functionality in nginx, with modules!Extending functionality in nginx, with modules!
Extending functionality in nginx, with modules!
 
Learn nginx in 90mins
Learn nginx in 90minsLearn nginx in 90mins
Learn nginx in 90mins
 
NGINX: Basics & Best Practices - EMEA Broadcast
NGINX: Basics & Best Practices - EMEA BroadcastNGINX: Basics & Best Practices - EMEA Broadcast
NGINX: Basics & Best Practices - EMEA Broadcast
 
High Availability Content Caching with NGINX
High Availability Content Caching with NGINXHigh Availability Content Caching with NGINX
High Availability Content Caching with NGINX
 
Delivering High-Availability Web Services with NGINX Plus on AWS
Delivering High-Availability Web Services with NGINX Plus on AWSDelivering High-Availability Web Services with NGINX Plus on AWS
Delivering High-Availability Web Services with NGINX Plus on AWS
 
Load Balancing Applications with NGINX in a CoreOS Cluster
Load Balancing Applications with NGINX in a CoreOS ClusterLoad Balancing Applications with NGINX in a CoreOS Cluster
Load Balancing Applications with NGINX in a CoreOS Cluster
 
What's New in NGINX Plus R12?
What's New in NGINX Plus R12? What's New in NGINX Plus R12?
What's New in NGINX Plus R12?
 
Nginx dhruba mandal
Nginx dhruba mandalNginx dhruba mandal
Nginx dhruba mandal
 
Rate Limiting with NGINX and NGINX Plus
Rate Limiting with NGINX and NGINX PlusRate Limiting with NGINX and NGINX Plus
Rate Limiting with NGINX and NGINX Plus
 
NGINX Plus on AWS
NGINX Plus on AWSNGINX Plus on AWS
NGINX Plus on AWS
 
What's New in NGINX Plus R7?
What's New in NGINX Plus R7?What's New in NGINX Plus R7?
What's New in NGINX Plus R7?
 
Apache Camel: Jetty Component With Example
Apache Camel: Jetty Component With ExampleApache Camel: Jetty Component With Example
Apache Camel: Jetty Component With Example
 
How to monitor NGINX
How to monitor NGINXHow to monitor NGINX
How to monitor NGINX
 
Load Balancing with Nginx
Load Balancing with NginxLoad Balancing with Nginx
Load Balancing with Nginx
 
Lcu14 Lightning Talk- NGINX
Lcu14 Lightning Talk- NGINXLcu14 Lightning Talk- NGINX
Lcu14 Lightning Talk- NGINX
 
Introduction to Nginx
Introduction to NginxIntroduction to Nginx
Introduction to Nginx
 
Delivering High Performance Websites with NGINX
Delivering High Performance Websites with NGINXDelivering High Performance Websites with NGINX
Delivering High Performance Websites with NGINX
 
Deploying NGINX Plus with Ansible
Deploying NGINX Plus with AnsibleDeploying NGINX Plus with Ansible
Deploying NGINX Plus with Ansible
 

Viewers also liked

Interconnecting containers at scale #Dockercon
Interconnecting containers at scale #Dockercon Interconnecting containers at scale #Dockercon
Interconnecting containers at scale #Dockercon sarahnovotny
 
Oracle Exec Summary 7000 Unified Storage
Oracle Exec Summary 7000 Unified StorageOracle Exec Summary 7000 Unified Storage
Oracle Exec Summary 7000 Unified StorageDavid R. Klauser
 
Will you help kill your 30 year Mortgage?
Will you help kill your 30 year Mortgage?Will you help kill your 30 year Mortgage?
Will you help kill your 30 year Mortgage?payitearly
 
Trackless Speed Gate
Trackless  Speed GateTrackless  Speed Gate
Trackless Speed Gatecholder
 
Cymphonix Launches iPhone App and New Version of Network Composer Software
Cymphonix Launches iPhone App and New Version of Network Composer SoftwareCymphonix Launches iPhone App and New Version of Network Composer Software
Cymphonix Launches iPhone App and New Version of Network Composer SoftwareJulie Tangen
 
Future Success Web 2 Overview
Future Success Web 2 OverviewFuture Success Web 2 Overview
Future Success Web 2 Overviewpapin0
 
Presentazione ricerca modena_definitivo
Presentazione ricerca modena_definitivoPresentazione ricerca modena_definitivo
Presentazione ricerca modena_definitivoFrancesco Baruffi
 
Where's Math The Math?
Where's Math The Math?Where's Math The Math?
Where's Math The Math?Glenn Kenyon
 
Social Media Platforms for Small Companies
Social Media Platforms for Small CompaniesSocial Media Platforms for Small Companies
Social Media Platforms for Small CompaniesInboundMarketingPR.com
 
איך להתחיל סטארטאפ 2016
איך להתחיל סטארטאפ 2016איך להתחיל סטארטאפ 2016
איך להתחיל סטארטאפ 2016Ido Green
 
The High School Connection: Bridging the Gap Between High School and College
The High School Connection: Bridging the Gap Between High School and CollegeThe High School Connection: Bridging the Gap Between High School and College
The High School Connection: Bridging the Gap Between High School and CollegeElizabeth Nesius
 
Cymphonix Delivers Visibility and Control of Internet Content
Cymphonix Delivers Visibility and Control of Internet ContentCymphonix Delivers Visibility and Control of Internet Content
Cymphonix Delivers Visibility and Control of Internet ContentJulie Tangen
 
Scaling my sql_in_3d
Scaling my sql_in_3dScaling my sql_in_3d
Scaling my sql_in_3dsarahnovotny
 
运营专业型社区的经验和反思
运营专业型社区的经验和反思运营专业型社区的经验和反思
运营专业型社区的经验和反思Robbin Fan
 
BANDI RICERCA PMI e GRANDI IMPRESE
BANDI RICERCA PMI e GRANDI IMPRESEBANDI RICERCA PMI e GRANDI IMPRESE
BANDI RICERCA PMI e GRANDI IMPRESEFrancesco Baruffi
 

Viewers also liked (20)

Interconnecting containers at scale #Dockercon
Interconnecting containers at scale #Dockercon Interconnecting containers at scale #Dockercon
Interconnecting containers at scale #Dockercon
 
Oracle Exec Summary 7000 Unified Storage
Oracle Exec Summary 7000 Unified StorageOracle Exec Summary 7000 Unified Storage
Oracle Exec Summary 7000 Unified Storage
 
Will you help kill your 30 year Mortgage?
Will you help kill your 30 year Mortgage?Will you help kill your 30 year Mortgage?
Will you help kill your 30 year Mortgage?
 
Presentación1
Presentación1Presentación1
Presentación1
 
Trackless Speed Gate
Trackless  Speed GateTrackless  Speed Gate
Trackless Speed Gate
 
Cymphonix Launches iPhone App and New Version of Network Composer Software
Cymphonix Launches iPhone App and New Version of Network Composer SoftwareCymphonix Launches iPhone App and New Version of Network Composer Software
Cymphonix Launches iPhone App and New Version of Network Composer Software
 
Future Success Web 2 Overview
Future Success Web 2 OverviewFuture Success Web 2 Overview
Future Success Web 2 Overview
 
5th Grade
5th Grade5th Grade
5th Grade
 
Presentazione ricerca modena_definitivo
Presentazione ricerca modena_definitivoPresentazione ricerca modena_definitivo
Presentazione ricerca modena_definitivo
 
Estndares
EstndaresEstndares
Estndares
 
Where's Math The Math?
Where's Math The Math?Where's Math The Math?
Where's Math The Math?
 
Social Media Platforms for Small Companies
Social Media Platforms for Small CompaniesSocial Media Platforms for Small Companies
Social Media Platforms for Small Companies
 
איך להתחיל סטארטאפ 2016
איך להתחיל סטארטאפ 2016איך להתחיל סטארטאפ 2016
איך להתחיל סטארטאפ 2016
 
The High School Connection: Bridging the Gap Between High School and College
The High School Connection: Bridging the Gap Between High School and CollegeThe High School Connection: Bridging the Gap Between High School and College
The High School Connection: Bridging the Gap Between High School and College
 
Cymphonix Delivers Visibility and Control of Internet Content
Cymphonix Delivers Visibility and Control of Internet ContentCymphonix Delivers Visibility and Control of Internet Content
Cymphonix Delivers Visibility and Control of Internet Content
 
Scaling my sql_in_3d
Scaling my sql_in_3dScaling my sql_in_3d
Scaling my sql_in_3d
 
Debt Taxes
Debt TaxesDebt Taxes
Debt Taxes
 
5 things MySql
5 things MySql5 things MySql
5 things MySql
 
运营专业型社区的经验和反思
运营专业型社区的经验和反思运营专业型社区的经验和反思
运营专业型社区的经验和反思
 
BANDI RICERCA PMI e GRANDI IMPRESE
BANDI RICERCA PMI e GRANDI IMPRESEBANDI RICERCA PMI e GRANDI IMPRESE
BANDI RICERCA PMI e GRANDI IMPRESE
 

Similar to NGINX 101 - now with more Docker

ITB2019 NGINX Overview and Technical Aspects - Kevin Jones
ITB2019 NGINX Overview and Technical Aspects - Kevin JonesITB2019 NGINX Overview and Technical Aspects - Kevin Jones
ITB2019 NGINX Overview and Technical Aspects - Kevin JonesOrtus Solutions, Corp
 
NGINX: Basics and Best Practices
NGINX: Basics and Best PracticesNGINX: Basics and Best Practices
NGINX: Basics and Best PracticesNGINX, Inc.
 
NGINX: Basics and Best Practices EMEA
NGINX: Basics and Best Practices EMEANGINX: Basics and Best Practices EMEA
NGINX: Basics and Best Practices EMEANGINX, Inc.
 
NGINX: High Performance Load Balancing
NGINX: High Performance Load BalancingNGINX: High Performance Load Balancing
NGINX: High Performance Load BalancingNGINX, Inc.
 
NGINX ADC: Basics and Best Practices
NGINX ADC: Basics and Best PracticesNGINX ADC: Basics and Best Practices
NGINX ADC: Basics and Best PracticesNGINX, Inc.
 
NGINX ADC: Basics and Best Practices – EMEA
NGINX ADC: Basics and Best Practices – EMEANGINX ADC: Basics and Best Practices – EMEA
NGINX ADC: Basics and Best Practices – EMEANGINX, Inc.
 
What’s New in NGINX Plus R16? – EMEA
What’s New in NGINX Plus R16? – EMEAWhat’s New in NGINX Plus R16? – EMEA
What’s New in NGINX Plus R16? – EMEANGINX, Inc.
 
High Availability Content Caching with NGINX
High Availability Content Caching with NGINXHigh Availability Content Caching with NGINX
High Availability Content Caching with NGINXKevin Jones
 
Using NGINX as an Effective and Highly Available Content Cache
Using NGINX as an Effective and Highly Available Content CacheUsing NGINX as an Effective and Highly Available Content Cache
Using NGINX as an Effective and Highly Available Content CacheKevin Jones
 
What’s New in NGINX Plus R16?
What’s New in NGINX Plus R16?What’s New in NGINX Plus R16?
What’s New in NGINX Plus R16?NGINX, Inc.
 
(ATS4-PLAT01) Core Architecture Changes in AEP 9.0 and their Impact on Admini...
(ATS4-PLAT01) Core Architecture Changes in AEP 9.0 and their Impact on Admini...(ATS4-PLAT01) Core Architecture Changes in AEP 9.0 and their Impact on Admini...
(ATS4-PLAT01) Core Architecture Changes in AEP 9.0 and their Impact on Admini...BIOVIA
 
Nginx Deep Dive Kubernetes Ingress
Nginx Deep Dive Kubernetes IngressNginx Deep Dive Kubernetes Ingress
Nginx Deep Dive Kubernetes IngressKnoldus Inc.
 
Introduction to Infrastructure as Code & Automation / Introduction to Chef
Introduction to Infrastructure as Code & Automation / Introduction to ChefIntroduction to Infrastructure as Code & Automation / Introduction to Chef
Introduction to Infrastructure as Code & Automation / Introduction to ChefAll Things Open
 
NGINX Installation and Tuning
NGINX Installation and TuningNGINX Installation and Tuning
NGINX Installation and TuningNGINX, Inc.
 
Introduction to Infrastructure as Code & Automation / Introduction to Chef
Introduction to Infrastructure as Code & Automation / Introduction to ChefIntroduction to Infrastructure as Code & Automation / Introduction to Chef
Introduction to Infrastructure as Code & Automation / Introduction to ChefNathen Harvey
 
What’s New in NGINX Plus R15? - EMEA
What’s New in NGINX Plus R15? - EMEAWhat’s New in NGINX Plus R15? - EMEA
What’s New in NGINX Plus R15? - EMEANGINX, Inc.
 
What’s New in NGINX Plus R15?
What’s New in NGINX Plus R15?What’s New in NGINX Plus R15?
What’s New in NGINX Plus R15?NGINX, Inc.
 
Best And Worst Practices Deploying IBM Connections
Best And Worst Practices Deploying IBM ConnectionsBest And Worst Practices Deploying IBM Connections
Best And Worst Practices Deploying IBM ConnectionsLetsConnect
 
cache concepts and varnish-cache
cache concepts and varnish-cachecache concepts and varnish-cache
cache concepts and varnish-cacheMarc Cortinas Val
 

Similar to NGINX 101 - now with more Docker (20)

ITB2019 NGINX Overview and Technical Aspects - Kevin Jones
ITB2019 NGINX Overview and Technical Aspects - Kevin JonesITB2019 NGINX Overview and Technical Aspects - Kevin Jones
ITB2019 NGINX Overview and Technical Aspects - Kevin Jones
 
NGINX: Basics and Best Practices
NGINX: Basics and Best PracticesNGINX: Basics and Best Practices
NGINX: Basics and Best Practices
 
NGINX: Basics and Best Practices EMEA
NGINX: Basics and Best Practices EMEANGINX: Basics and Best Practices EMEA
NGINX: Basics and Best Practices EMEA
 
NGINX: High Performance Load Balancing
NGINX: High Performance Load BalancingNGINX: High Performance Load Balancing
NGINX: High Performance Load Balancing
 
NGINX ADC: Basics and Best Practices
NGINX ADC: Basics and Best PracticesNGINX ADC: Basics and Best Practices
NGINX ADC: Basics and Best Practices
 
NGINX ADC: Basics and Best Practices – EMEA
NGINX ADC: Basics and Best Practices – EMEANGINX ADC: Basics and Best Practices – EMEA
NGINX ADC: Basics and Best Practices – EMEA
 
What’s New in NGINX Plus R16? – EMEA
What’s New in NGINX Plus R16? – EMEAWhat’s New in NGINX Plus R16? – EMEA
What’s New in NGINX Plus R16? – EMEA
 
High Availability Content Caching with NGINX
High Availability Content Caching with NGINXHigh Availability Content Caching with NGINX
High Availability Content Caching with NGINX
 
Using NGINX as an Effective and Highly Available Content Cache
Using NGINX as an Effective and Highly Available Content CacheUsing NGINX as an Effective and Highly Available Content Cache
Using NGINX as an Effective and Highly Available Content Cache
 
What’s New in NGINX Plus R16?
What’s New in NGINX Plus R16?What’s New in NGINX Plus R16?
What’s New in NGINX Plus R16?
 
(ATS4-PLAT01) Core Architecture Changes in AEP 9.0 and their Impact on Admini...
(ATS4-PLAT01) Core Architecture Changes in AEP 9.0 and their Impact on Admini...(ATS4-PLAT01) Core Architecture Changes in AEP 9.0 and their Impact on Admini...
(ATS4-PLAT01) Core Architecture Changes in AEP 9.0 and their Impact on Admini...
 
Nginx Deep Dive Kubernetes Ingress
Nginx Deep Dive Kubernetes IngressNginx Deep Dive Kubernetes Ingress
Nginx Deep Dive Kubernetes Ingress
 
Introduction to Infrastructure as Code & Automation / Introduction to Chef
Introduction to Infrastructure as Code & Automation / Introduction to ChefIntroduction to Infrastructure as Code & Automation / Introduction to Chef
Introduction to Infrastructure as Code & Automation / Introduction to Chef
 
NGINX Installation and Tuning
NGINX Installation and TuningNGINX Installation and Tuning
NGINX Installation and Tuning
 
Introduction to Infrastructure as Code & Automation / Introduction to Chef
Introduction to Infrastructure as Code & Automation / Introduction to ChefIntroduction to Infrastructure as Code & Automation / Introduction to Chef
Introduction to Infrastructure as Code & Automation / Introduction to Chef
 
What’s New in NGINX Plus R15? - EMEA
What’s New in NGINX Plus R15? - EMEAWhat’s New in NGINX Plus R15? - EMEA
What’s New in NGINX Plus R15? - EMEA
 
Apache1.ppt
Apache1.pptApache1.ppt
Apache1.ppt
 
What’s New in NGINX Plus R15?
What’s New in NGINX Plus R15?What’s New in NGINX Plus R15?
What’s New in NGINX Plus R15?
 
Best And Worst Practices Deploying IBM Connections
Best And Worst Practices Deploying IBM ConnectionsBest And Worst Practices Deploying IBM Connections
Best And Worst Practices Deploying IBM Connections
 
cache concepts and varnish-cache
cache concepts and varnish-cachecache concepts and varnish-cache
cache concepts and varnish-cache
 

More from sarahnovotny

Building a Learning Culture
Building a Learning CultureBuilding a Learning Culture
Building a Learning Culturesarahnovotny
 
Lessons Learned and Best Practices for Game Development in the Cloud
Lessons Learned and Best Practices for Game Development in the CloudLessons Learned and Best Practices for Game Development in the Cloud
Lessons Learned and Best Practices for Game Development in the Cloudsarahnovotny
 
people hacking: opensource biz etiquette
people hacking: opensource biz etiquettepeople hacking: opensource biz etiquette
people hacking: opensource biz etiquettesarahnovotny
 
IRL: How Geeks Undermine Their Presentations & Conversations With Body Language
IRL: How Geeks Undermine Their Presentations & Conversations With Body LanguageIRL: How Geeks Undermine Their Presentations & Conversations With Body Language
IRL: How Geeks Undermine Their Presentations & Conversations With Body Languagesarahnovotny
 
all data everywhere
all data everywhereall data everywhere
all data everywheresarahnovotny
 
you know databases, how hard can MySQL be?
you know databases, how hard can MySQL be?you know databases, how hard can MySQL be?
you know databases, how hard can MySQL be?sarahnovotny
 
nursing for future transhumanist
nursing for future transhumanistnursing for future transhumanist
nursing for future transhumanistsarahnovotny
 
IGNITE MySQL - Backups Don't Make Me Money
IGNITE MySQL - Backups Don't Make Me MoneyIGNITE MySQL - Backups Don't Make Me Money
IGNITE MySQL - Backups Don't Make Me Moneysarahnovotny
 

More from sarahnovotny (10)

Building a Learning Culture
Building a Learning CultureBuilding a Learning Culture
Building a Learning Culture
 
0 to enterprise
0 to enterprise0 to enterprise
0 to enterprise
 
Lessons Learned and Best Practices for Game Development in the Cloud
Lessons Learned and Best Practices for Game Development in the CloudLessons Learned and Best Practices for Game Development in the Cloud
Lessons Learned and Best Practices for Game Development in the Cloud
 
people hacking: opensource biz etiquette
people hacking: opensource biz etiquettepeople hacking: opensource biz etiquette
people hacking: opensource biz etiquette
 
IRL: How Geeks Undermine Their Presentations & Conversations With Body Language
IRL: How Geeks Undermine Their Presentations & Conversations With Body LanguageIRL: How Geeks Undermine Their Presentations & Conversations With Body Language
IRL: How Geeks Undermine Their Presentations & Conversations With Body Language
 
geek_lifestyle
geek_lifestylegeek_lifestyle
geek_lifestyle
 
all data everywhere
all data everywhereall data everywhere
all data everywhere
 
you know databases, how hard can MySQL be?
you know databases, how hard can MySQL be?you know databases, how hard can MySQL be?
you know databases, how hard can MySQL be?
 
nursing for future transhumanist
nursing for future transhumanistnursing for future transhumanist
nursing for future transhumanist
 
IGNITE MySQL - Backups Don't Make Me Money
IGNITE MySQL - Backups Don't Make Me MoneyIGNITE MySQL - Backups Don't Make Me Money
IGNITE MySQL - Backups Don't Make Me Money
 

Recently uploaded

『澳洲文凭』买詹姆士库克大学毕业证书成绩单办理澳洲JCU文凭学位证书
『澳洲文凭』买詹姆士库克大学毕业证书成绩单办理澳洲JCU文凭学位证书『澳洲文凭』买詹姆士库克大学毕业证书成绩单办理澳洲JCU文凭学位证书
『澳洲文凭』买詹姆士库克大学毕业证书成绩单办理澳洲JCU文凭学位证书rnrncn29
 
SCM Symposium PPT Format Customer loyalty is predi
SCM Symposium PPT Format Customer loyalty is prediSCM Symposium PPT Format Customer loyalty is predi
SCM Symposium PPT Format Customer loyalty is predieusebiomeyer
 
IP addressing and IPv6, presented by Paul Wilson at IETF 119
IP addressing and IPv6, presented by Paul Wilson at IETF 119IP addressing and IPv6, presented by Paul Wilson at IETF 119
IP addressing and IPv6, presented by Paul Wilson at IETF 119APNIC
 
『澳洲文凭』买拉筹伯大学毕业证书成绩单办理澳洲LTU文凭学位证书
『澳洲文凭』买拉筹伯大学毕业证书成绩单办理澳洲LTU文凭学位证书『澳洲文凭』买拉筹伯大学毕业证书成绩单办理澳洲LTU文凭学位证书
『澳洲文凭』买拉筹伯大学毕业证书成绩单办理澳洲LTU文凭学位证书rnrncn29
 
Company Snapshot Theme for Business by Slidesgo.pptx
Company Snapshot Theme for Business by Slidesgo.pptxCompany Snapshot Theme for Business by Slidesgo.pptx
Company Snapshot Theme for Business by Slidesgo.pptxMario
 
Unidad 4 – Redes de ordenadores (en inglés).pptx
Unidad 4 – Redes de ordenadores (en inglés).pptxUnidad 4 – Redes de ordenadores (en inglés).pptx
Unidad 4 – Redes de ordenadores (en inglés).pptxmibuzondetrabajo
 
TRENDS Enabling and inhibiting dimensions.pptx
TRENDS Enabling and inhibiting dimensions.pptxTRENDS Enabling and inhibiting dimensions.pptx
TRENDS Enabling and inhibiting dimensions.pptxAndrieCagasanAkio
 
Cybersecurity Threats and Cybersecurity Best Practices
Cybersecurity Threats and Cybersecurity Best PracticesCybersecurity Threats and Cybersecurity Best Practices
Cybersecurity Threats and Cybersecurity Best PracticesLumiverse Solutions Pvt Ltd
 
ETHICAL HACKING dddddddddddddddfnandni.pptx
ETHICAL HACKING dddddddddddddddfnandni.pptxETHICAL HACKING dddddddddddddddfnandni.pptx
ETHICAL HACKING dddddddddddddddfnandni.pptxNIMMANAGANTI RAMAKRISHNA
 

Recently uploaded (9)

『澳洲文凭』买詹姆士库克大学毕业证书成绩单办理澳洲JCU文凭学位证书
『澳洲文凭』买詹姆士库克大学毕业证书成绩单办理澳洲JCU文凭学位证书『澳洲文凭』买詹姆士库克大学毕业证书成绩单办理澳洲JCU文凭学位证书
『澳洲文凭』买詹姆士库克大学毕业证书成绩单办理澳洲JCU文凭学位证书
 
SCM Symposium PPT Format Customer loyalty is predi
SCM Symposium PPT Format Customer loyalty is prediSCM Symposium PPT Format Customer loyalty is predi
SCM Symposium PPT Format Customer loyalty is predi
 
IP addressing and IPv6, presented by Paul Wilson at IETF 119
IP addressing and IPv6, presented by Paul Wilson at IETF 119IP addressing and IPv6, presented by Paul Wilson at IETF 119
IP addressing and IPv6, presented by Paul Wilson at IETF 119
 
『澳洲文凭』买拉筹伯大学毕业证书成绩单办理澳洲LTU文凭学位证书
『澳洲文凭』买拉筹伯大学毕业证书成绩单办理澳洲LTU文凭学位证书『澳洲文凭』买拉筹伯大学毕业证书成绩单办理澳洲LTU文凭学位证书
『澳洲文凭』买拉筹伯大学毕业证书成绩单办理澳洲LTU文凭学位证书
 
Company Snapshot Theme for Business by Slidesgo.pptx
Company Snapshot Theme for Business by Slidesgo.pptxCompany Snapshot Theme for Business by Slidesgo.pptx
Company Snapshot Theme for Business by Slidesgo.pptx
 
Unidad 4 – Redes de ordenadores (en inglés).pptx
Unidad 4 – Redes de ordenadores (en inglés).pptxUnidad 4 – Redes de ordenadores (en inglés).pptx
Unidad 4 – Redes de ordenadores (en inglés).pptx
 
TRENDS Enabling and inhibiting dimensions.pptx
TRENDS Enabling and inhibiting dimensions.pptxTRENDS Enabling and inhibiting dimensions.pptx
TRENDS Enabling and inhibiting dimensions.pptx
 
Cybersecurity Threats and Cybersecurity Best Practices
Cybersecurity Threats and Cybersecurity Best PracticesCybersecurity Threats and Cybersecurity Best Practices
Cybersecurity Threats and Cybersecurity Best Practices
 
ETHICAL HACKING dddddddddddddddfnandni.pptx
ETHICAL HACKING dddddddddddddddfnandni.pptxETHICAL HACKING dddddddddddddddfnandni.pptx
ETHICAL HACKING dddddddddddddddfnandni.pptx
 

NGINX 101 - now with more Docker

  • 1.
  • 3.
  • 4. Core NGINX functionality includes HTTP request, proxy and caching services which can be combined into a complete application delivery platform. Or, as we like to think of it….
  • 5.
  • 6. The origins NGINX development began at Rambler.ru by Igor Sysoev to solve c10k problem • High concurrency • Low memory use • 2002 commodity hardware
  • 7. High Concurrency Source: Webfaction Blog: http://blog.webfaction.com/2008/12/a-little-holiday-present-10000-reqssec-with-nginx-2/
  • 8. Low Memory Use Source: Webfaction Blog: http://blog.webfaction.com/2008/12/a-little-holiday-present-10000-reqssec-with-nginx-2/
  • 9. Learn more at nginx.com Apache is like Microsoft Word, it has a million options but you only need six. Nginx does those six things, and it does five of them 50 times faster than Apache. - Chris Lea
  • 10. 1. What functionality do you require? • Standard modules • NGINX Plus functionality • Optional NGINX and third-party modules 3. How do you want to install? • “Official” NGINX packages (nginx.org) • Build from Source • From Operating System repository • From AWS or Azure Marketplaces • From Docker Hub Registry 2. What branch do you want to track? • Mainline (1.7) • Stable (1.6) • Something older? http://nginx.com/blog/nginx-1-6-1-7-released/ Questions before you begin
  • 11. $ wget http://nginx.org/keys/nginx_signing.key $ sudo apt-key add nginx_signing.key # cat > /etc/apt/sources.list.d/nginx.list deb http://nginx.org/packages/mainline/ubuntu/ trusty nginx deb-src http://nginx.org/packages/mainline/ubuntu/ trusty nginx # apt-get update # apt-cache policy nginx nginx: Installed: (none) Candidate: 1.7.0-1~trusty Version table: 1.7.0-1~trusty 0 500 http://nginx.org/packages/mainline/ubuntu/ trusty/nginx amd64 Packages 1.4.6-1ubuntu3 0 500 http://us.archive.ubuntu.com/ubuntu/ trusty/main amd64 Packages Traditional Installation http://nginx.org/en/linux_packages.html#mainline
  • 12. Verify it’s working # /etc/init.d/nginx status * nginx is running # /usr/sbin/nginx –v nginx version: nginx/1.7.0
  • 13. The basics of the install
  • 14. Where are the things • NGINX executable is at /usr/sbin/nginx • Configuration files at /etc/nginx • Log files at /var/log/nginx
  • 15. NGINX processes • One master process and many worker processes • The master process evaluates the configuration file and manages the worker processes • Worker processes handle actual requests [root@localhost ~]# ps -ef |grep nginx root 1991 1 0 08:06 ? 00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf nginx 2974 1991 0 08:22 ? 00:00:00 nginx: worker process nginx 2975 1991 0 08:22 ? 00:00:00 nginx: worker process
  • 16. Basic NGINX commands • To start NGINX, simply run the executable file at /usr/sbin/nginx • The executable can be run with a “-s” parameter followed by a signal. Reload configuration nginx –s reload Graceful shutdown. NGINX will wait for workers to finish processing requests nginx –s quit Fast shutdown nginx –s stop
  • 17. The NGINX configuration file • The configuration file determines how NGINX and its modules behave • The main file is named nginx.conf and is located in /etc/nginx • The main configuration file may include references to additional configuration files • Configuration consists of – Directives – Blocks – Contexts
  • 19. Directives • Consists of the directive name, followed by parameters and ends in a semicolon • Two types of directives – Simple directive – Block directive A Directive is a configuration statement that controls the behaviour of NGINX modules
  • 20. Block Directives A Block Directive is a directive that contains multiple configuration instructions • The configurations instructions inside a block directive are surrounded by braces (i.e { } )
  • 21. Context example • Example of a Server context, which has two location blocks • The server context here can also be referred to as a server block
  • 22. Specify the Server Block • Goes inside the HTTP context • Can contain a listen directive, server_name directive and root directive • Can specify many server blocks • Equivalent to VirtualHost in Apache The Server block defines the configuration for a virtual server
  • 23. Specify the Server Block • NGINX will choose which server to process a request based on the server name and the listen port The Server block defines the configuration for a virtual server Define a virtual server that listens for requests on port 80 http { server { listen 80; } }
  • 24. Location Block • Placed inside a server block • Server block can contain many location blocks • Can contain a Root directive, which will override the Root directive of the server • Can be nested inside a location block • Two types of location blocks Prefix location + Regex location • The location block defines the configuration that will apply based on a matching request URI
  • 25. Example Server and Location • Root directive sets the root directory for a request. • A request to localhost:8080 will return the • index.html file in /home/nginx/public_html server { listen 8080; root /home/nginx/public_html; location /application1 { } location /images/ { root /data; } }
  • 26. The Include directive • The include directive allows you to include additional configuration files • Syntax: include <path to file>; • Best Practices: – For each server, create a separate configuration file in /etc/nginx/conf.d – nginx.conf includes all files in the conf.d folder ending in .conf by default
  • 27. Defining server names • Use the server_name directive in the server context to define the names for your server server { server_name mycompany.com *.mycompany.com; }
  • 28. Simple Proxy Scenario • Server one listening for requests on port 80 and serves content from /home/nginx/public_html • Server two listens on port 8080 and serves content from /data/proxy • Requests for localhost are proxied over to the server on port 8080
  • 30. Logging • The error_log directive can be used to configure the logging settings • Syntax: error_log <file> <log level>; • Can be used in the main, server, http and location contexts • The Log level specifies how detailed the log output will be Example error_log logs/error.log info;
  • 31. Logging best practices • Should keep a separate error log file for each server • Helps to reduce size of each log file and makes troubleshooting easier server { server_name server1.com; root /data/server1.com; error_log logs/server1.error.log info; } server { server_name server2.com root /data/server2.com; error_log logs/server2.error.log info; }
  • 32. Proxying to the upstream block
  • 33. Specifying server priorities • By default, all servers defined in the upstream block are treated with equal priority • Use the weight parameter to indicate a higher or lower weighting for a particular server upstream myServers { server backend.server1 weight=5 server backend.server2 weight=3 server backend.server3 weight=2 }
  • 34. Reverse proxy and caching • It’s common to use NGINX in front of another web or application server • NGINX can handle serving all the static content, while requests for dynamic content such as php are proxied to the application server • Static content can then be cached to improve performance
  • 35. Defining the cache path http { proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=server-cache:8m max_size=1000m inactive=600m; proxy_temp_path /tmp/nginx; • proxy_cache_path directive to set where to store cached content • proxy_temp_path directive tells NGINX where to store temporary data which is used to build the cache • Both directives must be placed in HTTP context
  • 36. Defining the cache path • proxy_cache_path parameters – keys_zone parameter specifies the name and size of the cache – max_size parameter specifies the maximum size of the cache – Inactive parameter specifies how long cached data is kept for if not accessed
  • 37. Configuring the proxy cache • proxy_cache_key directive specifies to use the hostname/subdomain/domain and request URI as the key • proxy_cache directive defines the shared memory zone used for caching. – Name specified must match the name of the cache defined in the proxy_cache_path directive Location / { proxy_pass http://application.com:8080; proxy_cache_key “$scheme$host$request_uri”; proxy_cache server-cache; proxy_chache_valid 1m; proxy_cache_valid 404 1m; ]
  • 38. Passing headers • Use proxy_set_header directive to redefine the request header fields that are passed to the proxied server • Use this to pass on the hostname and IP address of the request machine • Without setting the headers, the server you proxy to will simply see your reverse proxy server’s host and IP proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  • 39. Configuring a HTTPS server • Enable SSL by specifying the SSL parameter on the listen directive • Specify the path of your SSL server certificate and private key server { listen 443 ssl; server_name training.secure.com; error_log logs/secure.error.log; ssl_certificate /etc/nginx/certs/nginxtraining.crt ssl_certificate_key /etc/nginx/certs/nginxtraining.key ]
  • 40. SSL session cache • SSL sessions can be stored in a cache and reused in order to avoid having to perform a “handshake” as part of subsequent connections • Reduces the amount of CPU intensive operations on the server • The session cache can be shared between workers • Cache will timeout after 5 minutes by default, but this can be configured with the ssl_session_timeout directive
  • 41. Session cache example • Syntax ssl_session_cache shared:<name>:size; • Size is specified in bytes or megabytes • 1 MB can store around 4000 sessions • Can specified in the http or server context Example http { ssl_session_cache shared:ssl:10m; ssl_session_timeout 10m; server { listen 443 ssl; ...
  • 44. Dockerfile FROM debian:wheezy MAINTAINER NGINX Docker Maintainers "docker-maint@nginx.com" RUN apt-key adv --keyserver pgp.mit.edu --recv-keys 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62 RUN echo "deb http://nginx.org/packages/mainline/debian/ wheezy nginx" >> /etc/apt/sources.list ENV NGINX_VERSION 1.7.10-1~wheezy RUN apt-get update && apt-get install -y ca-certificates nginx=${NGINX_VERSION} && rm -rf /var/lib/apt/lists/* # forward request and error logs to docker log collector RUN ln -sf /dev/stdout /var/log/nginx/access.log RUN ln -sf /dev/stderr /var/log/nginx/error.log VOLUME ["/var/cache/nginx"] EXPOSE 80 443 CMD ["nginx", "-g", "daemon off;"]
  • 45. $ docker run -P –d nginx ff635ea2653c9489de7037b5c106a26d36f5907e4e75a43f47a3a38029a56b14 # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ff635ea2653c nginx:latest "nginx -g 'daemon of 16 seconds ago Up 11 seconds 0.0.0.0:49153->443/tcp, 0.0.0.0:49154->80/tcp nginx-test Run our Docker container https://registry.hub.docker.com/_/nginx/
  • 46. $ docker@52.10.213.150 ~: docker run -it nginx /bin/bash root@74d2a7e93244:/# more /etc/nginx/nginx.conf user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } 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"’; … Exploring our Docker container
  • 47. Extending base images in your Dockerfile From @jpettazo’s Docker talk 20150220 #SCaLE13x
  • 48. Your NGINX Dockerfile FROM nginx RUN rm /etc/nginx/conf.d/default.conf RUN rm /etc/nginx/conf.d/example_ssl.conf COPY static-html-directory /usr/share/nginx/html COPY nginx.conf /etc/nginx/nginx.conf http://nginx.com/blog/deploying-nginx-nginx-plus-docker/ • Fancier options i.e. more repeatable and scalable – Defining VOLUMEs – Using helper containers – Linking containers