docker安装Nginx详细教程和基本配置

6,950 阅读1分钟

安装Nginx

下载Nginx镜像

docker pull nginx:latest

下载最新版本的nginx的镜像

运行nginx镜像

docker run --name nginx -p 80:80 -d nginx
  • 参数详解

    • --name nginx 指定容器的名称

    • -p 80:80 映射端口

    • -d 守护进程运行

从nginx容器中映射核心文件

  • 1、本地创建文件目录
mkdir -p /opt/docker/nginx/conf.d 
mkdir -p /opt/docker/nginx/html
mkdir -p /opt/docker/nginx/logs
mkdir -p /opt/docker/nginx/conf/nginx.conf 
  • 2、拷贝nginx容器对应的文件默认配置
docker cp nginx:/etc/nginx/nginx.conf /opt/docker/nginx/conf/nginx.conf
docker cp nginx:/etc/nginx/conf.d /opt/docker/nginx/conf.d
docker cp nginx:/usr/share/nginx/html /opt/docker/nginx
  • 3、停止并删除nginx容器
docker stop nginx 

docker rm nginx

重新启动nginx镜像重新新容器

docker run  -p 80:80 --name nginx --restart=always 
-v /opt/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /opt/docker/nginx/conf.d:/etc/nginx/conf.d \
-v /opt/docker/nginx/html:/usr/share/nginx/html \ 
-v /opt/docker/nginx/logs:/var/log/nginx \ 
-d  nginx

nginx基本配置

请求代理

location /test/ {  
    proxy_pass http://127.0.0.1:8888/;   
    proxy_read_timeout 90;   
    proxy_http_version 1.1;   
    proxy_set_header Upgrade $http_upgrade;   
    proxy_set_header Connection $http_connection;  
    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_bypass $http_upgrade; 
}

请求 http://127.0.0.1/test/index.html 会代理到 http://127.0.0.1:8888/index.html

ssl证书配置

  • 检查ssl是否安装
/usr/local/nginx/sbin/nginx -V
  • 配置nginx.conf
server {
    # 服务器端口使用443,开启ssl, 这里ssl就是上面安装的ssl模块
    listen       443 ssl;
    # 填写绑定证书的域名 ,多个以空格分开
    server_name  <a href="https://www.aliyun.com/minisite/goods?userCode=veyumm2k" target="_blank">hack520.com</a> <a href="https://www.aliyun.com/minisite/goods?userCode=veyumm2k" target="_blank">www.hack520.com</a>;

    # ssl证书地址
    ssl_certificate     /usr/local/nginx/cert/ssl.pem;  # pem文件的路径
    ssl_certificate_key  /usr/local/nginx/cert/ssl.key; # key文件的路径

    # ssl验证相关配置
    ssl_session_timeout  5m;    #缓存有效期
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;    #加密算法
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;    #安全链接可选的加密协议
    ssl_prefer_server_ciphers on;   #使用服务器端的首选算法

}

http强转https

server {   
    listen 80;  
    server_name www.test.com;  
    default_type 'text/html';   
    charset utf-8;   
    rewrite ^/(.*) https://$server_name/$1 permanent; #跳转到Https 
}

查看当前nginx的状态

location /status {
    stub_status on;
    access_log /var/log/nginx/status.log; #日志
}

配置好并重启 可以通过 http://127.0.0.1/status 来查看当前nginx的状态

代理静态文件(如图片)

location /a/b/ {   
    root /opt/docker/nginx/; 
}

如访问 http://127.0.0.1/a/b/test.png 实际是会代理到  /opt/docker/nginx/a/b目录下的test.png

静态页面代理

location /hello/ {   
    index index.html;   
    root /opt/docker/nginx/html/; 
}

访问 http://127.0.0.1/hello/ 会代理到**/opt/docker/nginx/html/路径下的index.html**页面

配置跨域

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Real-Port $remote_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

设置最大body的大小

如上传文件,指定最大的文件大小

client_max_body_size 50m;

设置请求头的大小

server_names_hash_bucket_size 256;
client_header_buffer_size 256k;
large_client_header_buffers 4 256k;

客户端保持连接的时间

keepalive_timeout 60s;