标签:includes https request 取数 building 插件 domain his 缓存
工作中经常需要在服务器上来做一下实验,亲自动手看看效果是否与理论描述的相同。用docker可以很方便的配置所需要的环境,以下内容记录了如何用docker配置一个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 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 命令查找)
# 开启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;
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;
}
location ~ .*\.(jpg|gif|png)$ {
valid_referers none blocked php.jesse.com;
if ($invalid_referer) {
return 403;
}
}
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
各个消息中的指令含义如下:
下面是简化的创建自签名证书流程,需要安装openssl,使用以下步骤:
使用openssl工具生成一个RSA私钥
openssl genrsa -des3 -out server.key 1024
参数说明:生成rsa私钥,des3算法,1024位强度,server.key是秘钥文件名。
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
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 严格安全传输)。
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;
}
以上我们在nginx镜像生成的容器中做了很多操作,也安装了以下必要的插件。下次使用的时候我们希望是在原来的基础上操作,我们可以直接使用之前的容器,我们也可以将之前的容器制作成镜像。
docker commit -a "username" -m "this is mynginx" <container id> mynginx
标签:includes https request 取数 building 插件 domain his 缓存
原文地址:https://www.cnblogs.com/jesse131/p/11529918.html