Browsed by
标签:ops

Docker

Docker

最近两年随着微服务而流行起来的Docker是一种轻量级容器技术(相对于VMWare,KVM等Hypervisor解决方案).

它能给开发,测试,运维各团队提供一个统一的运行环境, 这点很实用.

Docker可以看做在内核容器技术(Cgroup和Namespace)的基础上提供更高级功能的控制工具,主要特性:
(1)跨主机部署(2)以应用为中心 (3)自动构建 (4)版本管理 (5)组建重用 (6)共享 (7)工具生态链

Read More Read More

Nginx

Nginx

时常会用到Nginx,一直没有好好的梳理下,以后更新在这里.

基础使用

安装

官方教程来就好,没啥好说的.

# CentOS中 $releasever替换为主版本号,比如7; $basearch 替换为架构, 用arch命令查看
# Ubuntu中 用以下命令修复错误: GPG error: http://nginx.org/packages/ubuntu xenial Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY $key;
# sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys $key

常用命令:


# 手动启动
/etc/init.d/nginx start
# 开机启动服务
chkconfig nginx on
# 修改配置文件后,验证语法正确
nginx -t
# 重新加载配置让修改立即生效
sudo nginx -s reload

配置

  • /etc/nginx/nginx.conf
  • 默认常用Document Root : /var/www/, /srv, /usr/share/www

指令:

Location

  • 使用正则:必须以下面2种前缀开始
    • “~” 大小写匹配
    • “~*” 忽略大小写匹配
    • 不做匹配检查使用空block,即 “/ /”
  • 不使用正则(literal): 逐字匹配,一旦匹配停止继续检索
    • = 前缀强制URI和Location参数的匹配

正则备忘: ^ 代表以xx开始, $代表以xx结尾

location  = / {
# 只匹配 / 查询
}
location /test {
# 开启目录自动索引
    autoindex on;
}

URL重写

rewrite (PCRE, perl兼容正则)

try_files

# 首先找相应的URI
# 如果没有,尝试添加/作为目录去匹配
# 如果还是找不到,转发给代理
try_files $uri $uri/ @proxy;

主要变量:

  • $server_name : 虚拟主机名

本地开发环境

Mac安装

brew install nginx
# 以服务的形式随系统启动
brew services start nginx
# 主要配置目录
/usr/local/var/www  # Doc Root
/usr/local/etc/nginx/nginx.conf
/usr/local/etc/nginx/servers/  ## 虚拟server 

Windows使用服务

借助于 winsw 可以把Nginx安装成服务.

winsw.exe install/uninstall/start/stop/restart/status

Troubleshooting

Q: 在CentOS安装完,绑定8443端口出错: bind() to 0.0.0.0:8443 failed, Permission denied A: 原因: SELinux 阻止了连接 解决1: semanage port -a -t http_port_t -p tcp 8443 解决2: tsebool httpd_can_network_connect on -P

# 辅助调试命令
sestatus
tail -f /var/log/audit/audit.log
semanage port -l | grep http_port_t
getsebool -a | grep httpd
# 如果找不到semanage命令:
yum provides /usr/sbin/semanage
yum -y install policycoreutils-python

常见配置场景

端口重定向

    location /test {
        # 重写URLs,把请求/testXXXX转换成/XXXX交给AppServer.
        rewrite ^/test(.*) /$1 break;
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header   X-Forwarded-For $remote_addr;
        proxy_set_header   Host $http_host;
    }

对某路径启用认证密码保护

# 使用htpasswd工具加密密码
sudo apt-get install apache2-utils
sudo htpasswd -c /etc/nginx/.htpasswd admin
# 编辑配置,添加
sudo vi /etc/nginx/sites-available/default
    auth_basic "Private Property";
    auth_basic_user_file /etc/nginx/.htpasswd;
sudo service nginx reload

修改超时设置

Nginx连接Tomcat的默认超时是1分钟

vi /etc/nginx/conf.d/default.conf
# 修改proxy_read_timeout的值
location / {
        proxy_pass  http://127.0.0.1:8080;
        proxy_read_timeout 180;
    }

状态页

location /nginx_status {
        stub_status on;
        access_log   off;
        # Security
        allow 192.168.1.100;
        deny all;
   }

blog 二级域名与子目录映射

location / {  
        rewrite ^/(.*)$ /blog/$1 last;  
    }  
location ~* ^/blog/.*$ {  
        proxy_pass http://127.0.0.1:8080;  
    }  

资源