搭建ceph的radosgw网关时,使用的前端是nginx,有些s3的客户端软件只能用https协议访问,本篇设置nginx,使nginx支持http和https协议访问。
环境:ubuntu16.04、nginx/1.10.0
一、安装 openssl
apt-get install openssl
二、在/etc/nginx/conf/文件下(也可以在别的目录下),创建服务器私钥,命令会让你输入一个口令:
openssl genrsa -des3 -out server.key 1024
三、创建签名请求的证书(CSR):
openssl req -new-key server.key -outserver.csr //生成证书颁发机构,用于颁发公钥
四、在加载SSL支持的Nginx并使用上述私钥时除去必须的口令:
cp server.key server.key.org
openssl rsa -inserver.key.org -outserver.key //除去密码以便reload询问时不需要密码
五、最后标记证书使用上述私钥和CSR:
openssl x509 -req -days 365 -inserver.csr -signkey server.key -outserver.crt
六、 修改Nginx配置文件,让其包含新标记的证书和私钥并设置支持https和http访问:
http {
server {
listen 80 default backlog=2048; #如果硬性要求全部走https协议,这一行去除
listen 443 ssl; #如果硬性要求全部走https协议,这里去除ssl
server_name s3.ceph.work;
client_max_body_size 0;
#ssl on; #如果硬性要求全部走https协议,这里开启ssl on
ssl_certificate /etc/nginx/conf/server.crt; //证书位置
ssl_certificate_key /etc/nginx/conf/server.key; //私钥位置
location / {
fastcgi_pass_header Authorization;
fastcgi_pass_request_headers on;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param HTTP_CONTENT_LENGTH $content_length;
if ($request_method = PUT) {
rewrite ^ /PUT$request_uri;
}
include fastcgi_params;
fastcgi_pass unix:/var/run/ceph/ceph-client.rgw.node3.sock;
}
location /PUT/ {
internal;
fastcgi_pass_header Authorization;
fastcgi_pass_request_headers on;
include fastcgi_params;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param HTTP_CONTENT_LENGTH $content_length;
fastcgi_pass unix:/var/run/ceph/ceph-client.rgw.node3.sock;
}
}
}
七、重启nginx
systemctl start nginx.service
八、查看是否生效
systemctl status nginx.service
netstat -tlnp | grep nginx
如果设置成功可以看到nginx在443和80端口监听
打开浏览器验证。