Nginx&Docker部署NetCore项目 Nginx运行在Docker 1 2 3 4 5 6 sudo docker container run \ -d \ -p 127.0.0.2:8080:80 \ --rm \ --name mynginx \ nginx
上面命令下载并运行官方的 Nginx image,默认是最新版本(latest)。如果本机安装过以前的版本,请删掉重新安装,因为只有 1.13.9 才开始支持 server push。
上面命令的各个参数含义如下:
1 2 3 4 -d:在后台运行 -p :容器的80 端口映射到127.0 .0.2 :8080 --rm:容器停止运行后,自动删除容器文件 --name:容器的名字为mynginx
如果没有报错,就可以打开浏览器访问 127.0.0.2:8080 了。正常情况下,显示 Nginx 的欢迎页。
或者用curl显示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 ubuntu@ip-172 -31 -16 -20 :~/dotnet/conf$ curl http://127.0 .0.1 :8080 <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> body { width: 35 em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/" >nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/" >nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html> ubuntu@ip-172 -31 -16 -20 :~/dotnet/conf$
然后,把这个容器终止,由于–rm参数的作用,容器文件会自动删除。
1 sudo docker container stop mynginx
拷贝配置 首先,把容器里面的 Nginx 配置文件拷贝到本地。
1 sudo docker container cp mynginx:/etc/nginx .
上面命令的含义是,把mynginx容器的/etc/nginx拷贝到当前目录。不要漏掉最后那个点。
执行完成后,当前目录应该多出一个nginx子目录。然后,把这个子目录改名为conf。
容器终止:
1 sudo docker container stop mynginx
映射配置目录 1 2 3 4 5 6 7 sudo docker container run \ --name mynginx \ --rm \ --volume "$PWD /conf" :/etc/nginx \ -p 80 :80 \ -d \ nginx
–volume “$PWD/conf”:/etc/nginx表示把容器的配置目录/etc/nginx,映射到本地的conf子目录。
查看docker 容器日志:
1 sudo docker logs mynginx
映射证书 使用Let’s Encrypt生成的证书文件
1 2 3 4 5 6 7 sudo docker container run \ --name mynginx \ --rm \ --volume "$PWD /conf" :/etc/nginx \ -v /etc/letsencrypt:/etc/letsencrypt/ \ -d \ nginx
-v : 映射本地/etc/letsencrypt到容器/etc/letsencrypt目录。
HTTPS 配置 配置conf/conf.d/default.conf
文件,具体配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 server { listen 80 ; server_name www.shiyx.top; return 301 https://www.shiyx.top$request_uri ; server_tokens off ; } server { listen 443 ssl http2; ssl on ; server_name www.shiyx.top; if ($host != 'www.shiyx.top' ){ rewrite ^/(.*)$ https://www.shiyx.top/$1 permanent ; } ssl_certificate /etc/letsencrypt/live/shiyx.top/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/shiyx.top/privkey.pem; server_tokens off ; ssl_session_cache shared:SSL:1m ; ssl_session_timeout 5m ; ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2 ; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on ; location / { proxy_pass http://172.17.0.3:5000; proxy_http_version 1 .1 ; proxy_set_header Upgrade $http_upgrade ; proxy_set_header Connection keep-alive; proxy_set_header Host $http_host ; proxy_cache_bypass $http_upgrade ; } location ~ /.well-known { allow all; } }
查看docker ip地址
1 sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' <container-ID>
最后,启动一个新的Nginx容器。
** 注意运行目录**
1 2 3 4 5 6 7 8 9 sudo docker container run \ --name mynginx \ --rm \ --volume "$PWD /conf" :/etc/nginx \ -v /etc/letsencrypt:/etc/letsencrypt/ \ -p 80 :80 \ -p 443 :443 \ -d \ nginx
参考:http://www.ruanyifeng.com/blog/2018/02/nginx-docker.html
https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-2.0&tabs=aspnetcore2x
http://www.cnblogs.com/savorboard/p/dotnet-core-publish-nginx.html