代码示例:
Docker 是一个开源的应用容器引擎,它允许开发者打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
Docker 启动 Nginx
首先,确保你已经安装了 Docker。接下来,你可以使用以下命令来启动 Nginx:
docker run --name some-nginx -d -p 80:80 nginx
这条命令做了以下几件事:
--name some-nginx
给容器指定一个名称。-d
让容器在后台运行。-p 80:80
将容器的80端口映射到宿主机的80端口。nginx
指定使用官方的 Nginx 镜像。
常见 Nginx 配置方式
Nginx 的配置文件通常位于 /etc/nginx/nginx.conf
,但 Docker 容器中的配置文件可能位于不同的路径。以下是一些常见的 Nginx 配置示例:
- 基本的 Web 服务器配置
server {
listen 80;
server_name example.com www.example.com;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location /images/ {
root /usr/share/nginx;
}
# 重定向到HTTPS
location / {
return 301 https://$server_name$request_uri;
}
}
- 配置 HTTPS
要配置 HTTPS,你需要 SSL 证书。这里是一个使用自签名证书的示例:
server {
listen 443 ssl;
server_name example.com www.example.com;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
- 负载均衡
Nginx 可以作为反向代理服务器,实现负载均衡:
upstream backend {
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://backend;
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_set_header X-Forwarded-Proto $scheme;
}
}
- 缓存配置
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
server {
listen 80;
location / {
proxy_cache my_cache;
proxy_pass http://backend;
}
}
- 限制请求速率
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;
server {
listen 80;
location / {
limit_req zone=mylimit;
proxy_pass http://backend;
}
}
在 Docker 中使用自定义 Nginx 配置
如果你需要使用自定义的 Nginx 配置,你可以将配置文件复制到 Docker 容器中:
- 将你的 Nginx 配置文件保存到本地目录。
- 创建一个 Dockerfile:
FROM nginx
COPY ./my_nginx.conf /etc/nginx/conf.d/default.conf
- 构建镜像:
docker build -t my-nginx .
- 运行容器:
docker run --name my-running-nginx -d -p 80:80 my-nginx
这样,你就可以使用自定义的 Nginx 配置了。记得在实际部署时,根据你的具体需求调整配置。
喜欢本文,请点赞、收藏和关注!