2016-09-06 nginx在 docker 中的配置及问题

一. 在 docker 中启动 nginx

docker search ngxin
## 把配置文件放在本机的/programes/docker/ngxin/servers目录下, 通过- v 做文件映射
docker run --name nginx118 -v ~/programes/docker/ngxin/servers:/etc/nginx/conf.d/ -p 8801:80 -it --rm 4efb2fcdb1ab /bin/bash

启动说明参考https://hub.docker.com/_/nginx/

问题

说明中给的命令:
$ docker run --name some-nginx -v /some/nginx.conf:/etc/nginx/nginx.conf:ro -d nginx
并不会生效, nginx 读取的还是容器中的 nginx.conf, 并不是宿主机上的文件.

二. 关于 Nginx 的配置说明

为了某个url访问的几种配置:

配置一:

location = /fdp/admin {
    deny all;
}
  • /fdp/admin 后是否带有”/”的区别:

    • 有”/”表示只禁止访问该目录
    • 没有”/“表示禁止访问该目录下的所有文件
  • “=”表示精确匹配. 访问http://localhost:8801/fdp/admin返回403; 访问http://localhost:8801/fdp/admin/返回404.

配置二:

location ^~ /fdp/admin {
    deny all;
 }

^~ : 表示uri以某字符串开头
~ : 表示区分大小写的正则匹配
~*: 表示不区分大小写的正则匹配
访问http://localhost:8801/fdp/admin返回403; 访问http://localhost:8801/fdp/admin/返回403.

配置三:

location /{
    proxy_pass   http://xxxx.com
    proxy_set_header  X-FORWARDED-FOR  $remote_addr;
    if  ($request_uri  ~* "/fdp/admin") {
         return 500;
    }
 }

request_uri 可以返回 url 地址, 通过 if 判断是否匹配到需要屏蔽的字符, 使用return xxx 可以自定义返回httpCode, 较deny 返回403 ,更加普遍一点.
关于return的详细使用参考关于Nginx的return配置小技巧

Nginx 的命令说明:

nginx -c /path/to/nginx.conf // 以特定目录下的配置文件启动nginx:
nginx -s reload // 修改配置后重新加载生效
nginx -s reopen // 重新打开日志文件
nginx -s stop // 快速停止nginx
nginx -s quit // 完整有序的停止nginx
nginx -t // 测试当前配置文件是否正确
nginx -t -c /path/to/nginx.conf //测试特定的nginx配置文件是否正确

其中 reopen 只是重新打开日志文件, 并不是重启 nginx

2016-09-06 00:0094