代码示例:
Docker 是一个开源的应用容器引擎,它允许开发者打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
Docker 启动 Nginx
首先,确保你已经安装了 Docker。接下来,你可以使用以下命令来启动 Nginx:
docker run --name some-nginx -d -p <span class="token number">80</span>:80 nginxdocker run --name some-nginx -d -p <span class="token number">80</span>:80 nginxdocker 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; } }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; } }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; } }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; } }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; } }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; } }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; } }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; } }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; } }limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s; server { listen 80; location / { limit_req zone=mylimit; 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.confFROM nginx COPY ./my_nginx.conf /etc/nginx/conf.d/default.confFROM nginx COPY ./my_nginx.conf /etc/nginx/conf.d/default.conf
- 构建镜像:
docker build -t my-nginx <span class="token builtin class-name">.</span>docker build -t my-nginx <span class="token builtin class-name">.</span>docker build -t my-nginx .
- 运行容器:
docker run --name my-running-nginx -d -p <span class="token number">80</span>:80 my-nginxdocker run --name my-running-nginx -d -p <span class="token number">80</span>:80 my-nginxdocker run --name my-running-nginx -d -p 80:80 my-nginx
这样,你就可以使用自定义的 Nginx 配置了。记得在实际部署时,根据你的具体需求调整配置。
喜欢本文,请点赞、收藏和关注!
原文链接:https://blog.csdn.net/jimn2000/article/details/142722321?ops_request_misc=%257B%2522request%255Fid%2522%253A%252204dfaf3d156ee7a93762168645f3508a%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=04dfaf3d156ee7a93762168645f3508a&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~times_rank-5-142722321-null-null.nonecase&utm_term=%E9%A3%9E%E7%89%9BOS