Docker中Nginx服务器相关配置
工作中经常需要在服务器上来做一下实验,亲自动手看看效果是否与理论描述的相同。用docker可以很方便的配置所需要的环境,以下内容记录了如何用docker配置一个nginx服务器
下载nginx
从默认的中央仓库下载nginx
docker pull nginx
启动nginx images并进入后台
docker run -it nginx /bin/bash
通过查看linux发行版知晓用哪个包管理工具
cat /proc/version
Linux version 4.14.92-boot2docker (root@2c85d808f0f3) (gcc version 6.3.0 20170516 (Debian 6.3.0-18+deb9u1)) #1 SMP Wed Jan 9 22:03:23 UTC 2019
可以看到这里默认用的是Debian,因此包管理工具使用apt-get
安装常用工具vim curl等
apt-get install vim
如果安装不了,命令提示如下
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package vim
这时候需要敲:apt-get update,这个命令的作用是:同步 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的索引,这样才能获取到最新的软件包。
等更新完毕以后重新执行apt-get install vim命令即可。
设置ll别名
vi ~/.bashrc
添加下面这句
alias ll='ls $LS_OPTIONS -l'
docker端口映射方便本机访问
docker run -p 8080:80 -it nginx /bin/bash
在宿主机中访问localhost:8080即可看到nginx欢迎页面
注意
在window中宿主机是192.168.99.100,所以访问地址是http://192.168.99.100:8080
原因:docker是运行在Linux上的,在Windows中运行docker,实际上还是在Windows下先安装了一个Linux环境,然后在这个系统中运行的docker。也就是说,服务中使用的localhost指的是这个Linux环境的地址,而不是我们的宿主环境Windows。找到这个Linux的ip地址,一般情况下这个地址是192.168.99.100(docker-machine ip default 命令查找)
nginx相关配置
nginx的压缩输出配置
# 开启gzip
gzip on;
# 启用gzip压缩的最小文件
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
# gzip 压缩级别
gzip_comp_level 2;
# 进行压缩的文件类型。
gzip_types text/plain application/x-javascript application/css text/css application/xml text/javascript application/x-httpd-php
gzip_vary on;
Nginx配置静态资源跨域访问
location / {
add_header Access-Control-Allow-Origin http://php.jesse.com; //只允许的域名
add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS; //只允许的方法
root /var/www/php;
index index.html index.htm;
}
Nginx配置静态资源防盗链
location ~ .*\.(jpg|gif|png)$ {
valid_referers none blocked php.jesse.com;
if ($invalid_referer) {
return 403;
}
}
Nginx 静态资源缓存设置
location ~ .*\.(php|htm|html)$ {
add_header Cache-Control no-cache;
add_header Pragma no-cache;
}
location ~ .*\.(css|js|swf)$ {
add_header Cache-Control max-age=600;
}
location ~ .*\.(jpg|gif|png)$ {
expires 3d;
}
Cache-Control与Expires的作用一致,都是指明当前资源的有效期,控制浏览器是否直接从浏览器缓存取数据还是重新发请求到服务器取数据。只不过Cache-Control的选择更多,设置更细致,如果同时设置的话,其优先级高于Expires。
http协议头Cache-Control
值可以是public、private、no-cache、no- store、no-transform、must-revalidate、proxy-revalidate、max-age
各个消息中的指令含义如下:
- Public 指示响应可被任何缓存区缓存。
- Private 指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。
- no-cache 告诉浏览器、缓存服务器,不管本地副本是否过期,使用资源副本前,一定要到源服务器进行副本有效性校验。
- no-store 请求和响应消息都不使用缓存。
- max-age 指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。
- must-revalidate告诉浏览器、缓存服务器,本地副本过期前,可以使用本地副本;本地副本一旦过期,必须去源服务器进行有效性校验
Nginx 配置SSL及Http跳转到Https
下面是简化的创建自签名证书流程,需要安装openssl,使用以下步骤:
- 创建Key;
- 创建签名请求;
- 将Key的口令移除;
- 用Key签名证书。
生成私钥
使用openssl工具生成一个RSA私钥
openssl genrsa -des3 -out server.key 1024
参数说明:生成rsa私钥,des3算法,1024位强度,server.key是秘钥文件名。
生成CSR(证书签名请求)
openssl req -new -key server.key -out server.csr
生成证书签署请求文件之后,就可以进行证书签名了,而这个时候可以有两种选择。
第一种,就是你把这个CSR文件,发送给权威的CA机构,由他们进行验证和正式签名,这种方式签名后的证书就是得到权威机构进行验证的,具备有效性,效果就是所有客户端的浏览器都能认可你的证书,但是这种方式是收费的。
第二种,自建CA,自签证书,意思就是自己给自己签署证明,很显然,这种方式的签署证书,就不能得到权威验证,无法具备公认的有效性,所以如果客户端访问,会显示证书无效,或者不安全之类的,这种方式是免费的,一般内部测试或者使用的话,用这种方式就可以了。
删除私钥中的密码
在第1步创建私钥的过程中,由于必须要指定一个密码。而这个密码会带来一个副作用,那就是在每次nginx启动时,都会要求输入密码,这显然非常不方便。要删除私钥中的密码,操作如下:
openssl rsa -in server.key.org -out server.key
生成自签名证书
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
原80端口做301转跳
server {
listen 80;
server_name php.jesse.com;
return 301 https://php.jesse.com$request_uri; #跳转到Https
}
由于用户习惯,通常准备访问某个网站时,在浏览器中只会输入一个域名,而不会在域名前面加上 http:// 或者 https://,而是由浏览器自动填充,当前所有浏览器默认填充的都是http://。一般情况网站管理员会采用了 301/302 跳转的方式由 HTTP 跳转到 HTTPS,但是这个过程总使用到 HTTP 因此容易发生劫持,受到第三方的攻击。这个时候就需要用到 HSTS(HTTP 严格安全传输)。
开启ssl功能
server {
listen 443;
server_name php.jesse.com;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains"; # hsts
root /var/www/php;
index index.html index.htm;
ssl on;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
}
制作mynginx镜像
以上我们在nginx镜像生成的容器中做了很多操作,也安装了以下必要的插件。下次使用的时候我们希望是在原来的基础上操作,我们可以直接使用之前的容器,我们也可以将之前的容器制作成镜像。
docker commit -a "username" -m "this is mynginx" <container id> mynginx
参考文档
Docker中Nginx服务器相关配置的更多相关文章
- Linux中Nginx安装与配置详解
转载自:http://www.linuxidc.com/Linux/2016-08/134110.htm Linux中Nginx安装与配置详解(CentOS-6.5:nginx-1.5.0). 1 N ...
- 通过浏览器查看nginx服务器状态配置方法
通过浏览器查看nginx服务器状态配置方法 投稿:junjie 字体:[增加 减小] 类型:转载 这篇文章主要介绍了通过浏览器查看nginx服务器状态配置方法,本文讲解开启nginx-status的配 ...
- Analysis Services 中的服务器属性配置
Analysis Services 中的服务器属性配置: https://docs.microsoft.com/zh-cn/sql/analysis-services/server-propertie ...
- Nginx 服务器伪静态配置不当造成 Access denied
Nginx 服务器伪静态配置不当造成 Access denied 有群有反馈将 FastAdmin 布署到阿里云后无法打开后台. 出现如下提示,首页是可以打开,点登录链接后出现的.(下是群友的截图) ...
- Linux中Nginx服务器的部署和配置
目录 Nginx安装方式: yum源安装 目录结构: 源码包安装 目录结构: Nginx中支持PHP Nginx中配置php对mysql数据库的支持 Nginx配置反向代理服务器 正常代理 根据不同端 ...
- Nginx中并发性能相关配置参数说明
worker_processes:开启worker进程的数目,通常可设置为CPU核心的倍数.在不清楚的情况下,可设置成一倍于CPU核心数或auto(Nginx将自动发现CPU核心数). worker_ ...
- nginx 服务器常见配置以及负载均衡
# 配置启动用户,用户权限不够会出现访问 403 的情况 user root; # 启动多少个工作进程 worker_processes 1; # 错误日志文件进程文件的保存地址 error_log ...
- Docker运行Nginx服务器
一.获取Docker容器的Nginx镜像 二.创建Docker容器宿主机挂载目录 # 创建挂载目录,-v 显示创建的目录名 [root@idclooknet ~]# mkdir -vp /opt/do ...
- 2.5 Nginx服务器基础配置实例
pay平台nginx配置文件详解 ###全局块### user www www; #指定运行worker process 的用户和用户组 worker_processes 4; #指定Nginx开 ...
随机推荐
- UDP 协议的那点事儿
最近在回顾计算机网络的知识,以前上课没有认真学,只记得几个高大上的术语,所以趁着这次回顾,把学到的知识用博客的形式记录下来,一来加深自己的印象,二来希望让你对这些基础知识有一个更深入的了解.当然,我会 ...
- matlab-汉字unicode编码转换
str='黑大哥'bianma=unicode2native(str); disp(bianma); pp=native2unicode(bianma);disp(pp)
- CCNA 之 综合实验
CCNA 综合实验 需要:根据下列图中的网路拓扑,搭建环境; PC1属于VLAN10:PC2属于VLAN20:网关均在OR_C2811: VLAN10.20对应的网段分别为192.168.10.0.2 ...
- mysql 插入string类型变量时候,需要注意的问题,妈的,害我想了好几个小时!!
很多人在用php+MySQL做网站往数据库插入数据时发现如下错误: 注册失败!Unknown column '1a' in 'field list' 结果发现用数字提交是没有问题的,其他如char型就 ...
- php 图片指定留白叠加缩放
遇到这样一个需求:原图大小不一,而且留白也大小不一,需要将原图切出来一个核心图,然后将图片左右留白,组成一个其他尺寸的图片.换句话说,原图在新图片中的位置是可以控制的. 这里思路是:先创建一个规定大小 ...
- 在 Linux 部署多节点 Kubernetes 集群与 KubeSphere 容器平台
KubeSphere 是在 Kubernetes 之上构建的以应用为中心的企业级容器平台,所有供为用户提供简单易用的操作界面以及向导式操作方式.同时,KubeSphere Installer 提供了 ...
- rem布局方案
移动端适配,老生常谈的问题,这次再谈一次. 闲话少说,直奔正题. 一些像素概念 物理像素:即实际的每一个物理像素,也就是移动设备上每一个物理显示单元(点) 设备逻辑像素(css中的px):可以理解为一 ...
- 云享专家倪升武:微服务架构盛行的时代,你需要了解点 Spring Boot
[摘要] 微服务架构的本质在于分布式.去中心化. 随着互联网的高速发展,庞大的用户群体和快速的需求变化已经成为了传统架构的痛点. 在这种情况下,如何从系统架构的角度出发,构建出灵活.易扩展的系统来快速 ...
- KVM http网络加载镜像报错(mount: wrong fs type, bad option, bad superblock on /dev/loop0)
curl: (23) Failed writing body (7818 != 16384)loop: module loadeddracut-initqueue[579]: mount: wrong ...
- 使用Cocoapods创建私有podspec
Cocoapods是非常好用的一个iOS依赖管理工具,使用它可以方便的管理和更新项目中所使用到的第三方库,以及将自己的项目中的公共组件交由它去管理.Cocoapods的介绍及优点本文就不在赘述,我开始 ...