<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>服务器安全维护工作室 &#187; 服务器基础环境搭建</title>
	<atom:link href="https://www.fuwuqiok.com/tag/%e6%9c%8d%e5%8a%a1%e5%99%a8%e5%9f%ba%e7%a1%80%e7%8e%af%e5%a2%83%e6%90%ad%e5%bb%ba/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.fuwuqiok.com</link>
	<description></description>
	<lastBuildDate>Sun, 01 Mar 2020 07:28:40 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.2.26</generator>
	<item>
		<title>开源分布式搜索平台ELK(Elasticsearch+Logstash+Kibana)+Redis+Syslog-ng实现日志实时搜索</title>
		<link>https://www.fuwuqiok.com/%e5%bc%80%e6%ba%90%e5%88%86%e5%b8%83%e5%bc%8f%e6%90%9c%e7%b4%a2%e5%b9%b3%e5%8f%b0elkelasticsearchlogstashkibanaredissyslog-ng%e5%ae%9e%e7%8e%b0%e6%97%a5%e5%bf%97%e5%ae%9e%e6%97%b6%e6%90%9c/</link>
		<comments>https://www.fuwuqiok.com/%e5%bc%80%e6%ba%90%e5%88%86%e5%b8%83%e5%bc%8f%e6%90%9c%e7%b4%a2%e5%b9%b3%e5%8f%b0elkelasticsearchlogstashkibanaredissyslog-ng%e5%ae%9e%e7%8e%b0%e6%97%a5%e5%bf%97%e5%ae%9e%e6%97%b6%e6%90%9c/#comments</comments>
		<pubDate>Sun, 10 Jan 2016 13:33:01 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[服务器迁移]]></category>
		<category><![CDATA[网站代维]]></category>
		<category><![CDATA[网站防挂马]]></category>
		<category><![CDATA[开源分布式搜索平台ELK(Elasticsearch+Logstash+Kibana)+Redis+Syslog-ng实现日志实时搜索]]></category>
		<category><![CDATA[服务器基础环境搭建]]></category>
		<category><![CDATA[阿里云代维]]></category>

		<guid isPermaLink="false">https://www.fuwuqiok.com/?p=2876</guid>
		<description><![CDATA[<p>logstash + elasticsearch + Kibana+Redis+Syslog-ng Elast [&#8230;]</p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e5%bc%80%e6%ba%90%e5%88%86%e5%b8%83%e5%bc%8f%e6%90%9c%e7%b4%a2%e5%b9%b3%e5%8f%b0elkelasticsearchlogstashkibanaredissyslog-ng%e5%ae%9e%e7%8e%b0%e6%97%a5%e5%bf%97%e5%ae%9e%e6%97%b6%e6%90%9c/">开源分布式搜索平台ELK(Elasticsearch+Logstash+Kibana)+Redis+Syslog-ng实现日志实时搜索</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></description>
				<content:encoded><![CDATA[<p>logstash + elasticsearch + Kibana+Redis+Syslog-ng</p>
<p>ElasticSearch是一个基于Lucene构建的开源，分布式，RESTful搜索引擎。设计用于云计算中，能够达到实时搜索，稳定，可靠，快速，安装使用方便。支持通过HTTP使用JSON进行数据索引。</p>
<p>logstash是一个应用程序日志、事件的传输、处理、管理和搜索的平台。你可以用它来统一对应用程序日志进行收集管理，提供 Web 接口用于查询和统计。其实logstash是可以被别的替换，比如常见的fluented</p>
<p>Kibana是一个为 Logstash 和 ElasticSearch 提供的日志分析的 Web 接口。可使用它对日志进行高效的搜索、可视化、分析等各种操作。</p>
<p>Redis是一个高性能的内存key-value数据库,非必需安装,可以防止数据丢失.<br />
<a href="https://www.fuwuqiok.com/wp-content/uploads/2016/01/kibana.jpg"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/01/kibana.jpg" alt="kibana" width="536" height="177" /></a><br />
参考:<br />
http://www.logstash.net/<br />
http://chenlinux.com/2012/10/21/elasticearch-simple-usage/<br />
http://www.elasticsearch.cn<br />
http://download.oracle.com/otn-pub/java/jdk/7u67-b01/jdk-7u67-linux-x64.tar.gz?AuthParam=1408083909_3bf5b46169faab84d36cf74407132bba<br />
http://curran.blog.51cto.com/2788306/1263416<br />
http://storysky.blog.51cto.com/628458/1158707/<br />
http://zhumeng8337797.blog.163.com/blog/static/10076891420142712316899/<br />
http://enable.blog.51cto.com/747951/1049411<br />
http://chenlinux.com/2014/06/11/nginx-access-log-to-elasticsearch/<br />
http://www.w3c.com.cn/%E5%BC%80%E6%BA%90%E5%88%86%E5%B8%83%E5%BC%8F%E6%90%9C%E7%B4%A2%E5%B9%B3%E5%8F%B0elkelasticsearchlogstashkibana%E5%85%A5%E9%97%A8%E5%AD%A6%E4%B9%A0%E8%B5%84%E6%BA%90%E7%B4%A2%E5%BC%95<br />
http://woodygsd.blogspot.com/2014/06/an-adventure-with-elk-or-how-to-replace.html<br />
http://www.ricardomartins.com.br/enviando-dados-externos-para-a-stack-elk/<br />
http://tinytub.github.io/logstash-install.html</p>
<p>http://jamesmcfadden.co.uk/securing-elasticsearch-with-nginx/<br />
https://github.com/elasticsearch/logstash/blob/master/patterns/grok-patterns<br />
http://zhaoyanblog.com/archives/319.html<br />
http://www.vpsee.com/2014/05/install-and-play-with-elasticsearch/</p>
<p>ip说明<br />
118.x.x.x/16 为客户端ip<br />
192.168.0.39和61.x.x.x为ELK的内网和外网ip</p>
<h1>安装JDK</h1>
<p>http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html</p>
<div class="hl-surround">
<ol class="hl-main ln-show" title="Double click to hide line number.">
<li class="hl-firstline">tar zxvf jdk-7u67-linux-x64.tar.gz\?AuthParam\=1408083909_3bf5b46169faab84d36cf74407132b</li>
<li>mv jdk1.7.0_67 /usr/local/</li>
<li>cd /usr/local/</li>
<li>ln -s jdk1.7.0_67 jdk</li>
<li>chown -R root:root jdk/</li>
</ol>
</div>
<p><strong>配置环境变量</strong><br />
vi /etc/profile</p>
<div class="hl-surround">
<ol class="hl-main ln-show" title="Double click to hide line number.">
<li class="hl-firstline">export JAVA_HOME=/usr/local/jdk</li>
<li>export JRE_HOME=$JAVA_HOME/jre</li>
<li>export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH</li>
<li>export PATH=$JAVA_HOME/bin:$PATH</li>
<li>export REDIS_HOME=/usr/local/redis</li>
<li>export ES_HOME=/usr/local/elasticsearch</li>
<li>export ES_CLASSPATH=$ES_HOME/config</li>
</ol>
</div>
<p><strong>变量生效</strong><br />
source /etc/profile</p>
<p><strong>验证版本</strong><br />
java -version</p>
<div class="hl-surround">
<ol class="hl-main ln-show" title="Double click to hide line number.">
<li class="hl-firstline">java version &#8220;1.7.0_67&#8243;</li>
<li>Java(TM) SE Runtime Environment (build 1.7.0_67-b01)</li>
<li>Java HotSpot(TM) 64-Bit Server VM (build 24.65-b04, mixed mode)</li>
</ol>
</div>
<p>如果之前安装过java,可以先卸载<br />
rpm -qa |grep java<br />
java-1.6.0-openjdk-1.6.0.0-1.24.1.10.4.el5<br />
java-1.6.0-openjdk-devel-1.6.0.0-1.24.1.10.4.el5</p>
<p>rpm -e java-1.6.0-openjdk-1.6.0.0-1.24.1.10.4.el5 java-1.6.0-openjdk-devel-1.6.0.0-1.24.1.10.4.el5</p>
<h1>安装redis</h1>
<p>http://redis.io/</p>
<div class="hl-surround">
<ol class="hl-main ln-show" title="Double click to hide line number.">
<li class="hl-firstline">wget http://download.redis.io/releases/redis-2.6.17.tar.gz</li>
<li>tar zxvf redis-2.6.17.tar.gz</li>
<li>mv redis-2.6.17 /usr/local/</li>
<li>cd /usr/local</li>
<li>ln -s redis-2.6.17 redis</li>
<li>cd /usr/local/redis</li>
<li>make</li>
<li>make install</li>
</ol>
</div>
<p>cd utils<br />
./install_server.sh</p>
<div class="hl-surround">
<ol class="hl-main ln-show" title="Double click to hide line number.">
<li class="hl-firstline">Please select the redis port for this instance: [6379]</li>
<li>Selecting default: 6379</li>
<li>Please select the redis config file name [/etc/redis/6379.conf]</li>
<li>Selected default &#8211; /etc/redis/6379.conf</li>
<li>Please select the redis log file name [/var/log/redis_6379.log]</li>
<li>Selected default &#8211; /var/log/redis_6379.log</li>
<li>Please select the data directory for this instance [/var/lib/redis/6379]</li>
<li>Selected default &#8211; /var/lib/redis/6379</li>
<li>Please select the redis executable path [/usr/local/bin/redis-server]</li>
</ol>
</div>
<p><strong>编辑配置文件</strong><br />
vi /etc/redis/6379.conf</p>
<div class="hl-surround">
<ol class="hl-main ln-show" title="Double click to hide line number.">
<li class="hl-firstline">daemonize yes</li>
<li>port 6379</li>
<li>timeout 300</li>
<li>tcp-keepalive 60</li>
</ol>
</div>
<p><strong>启动</strong><br />
/etc/init.d/redis_6379 start</p>
<p>exists, process is already running or crashed<br />
如报这个错,需要编辑下/etc/init.d/redis_6379,去除头上的\n</p>
<p><strong>加入自动启动</strong><br />
chkconfig –add redis_6379</p>
<h1>安装Elasticsearch</h1>
<p>http://www.elasticsearch.org/<br />
http://www.elasticsearch.cn<br />
集群安装只要节点在同一网段下，设置一致的cluster.name，启动的Elasticsearch即可相互检测到对方，组成集群</p>
<div class="hl-surround">
<ol class="hl-main ln-show" title="Double click to hide line number.">
<li class="hl-firstline">wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.3.2.tar.gz</li>
<li>tar zxvf elasticsearch-1.3.2.tar.gz</li>
<li>mv elasticsearch-1.3.2 /usr/local/</li>
<li>cd /usr/local/</li>
<li>ln -s elasticsearch-1.3.2 elasticsearch</li>
<li>elasticsearch/bin/elasticsearch -f</li>
</ol>
</div>
<div class="hl-surround">
<ol class="hl-main ln-show" title="Double click to hide line number.">
<li class="hl-firstline">[2014-08-20 13:19:05,710][INFO ][node                     ] [Jackpot] version[1.3.2], pid[19320], build[dee175d/2014-08-13T14:29:30Z]</li>
<li>[2014-08-20 13:19:05,727][INFO ][node                     ] [Jackpot] initializing &#8230;</li>
<li>[2014-08-20 13:19:05,735][INFO ][plugins                  ] [Jackpot] loaded [], sites []</li>
<li>[2014-08-20 13:19:10,722][INFO ][node                     ] [Jackpot] initialized</li>
<li>[2014-08-20 13:19:10,723][INFO ][node                     ] [Jackpot] starting &#8230;</li>
<li>[2014-08-20 13:19:10,934][INFO ][transport                ] [Jackpot] bound_address {inet[/0.0.0.0:9301]}, publish_address {inet[/61.x.x.x:9301]}</li>
<li>[2014-08-20 13:19:10,958][INFO ][discovery                ] [Jackpot] elasticsearch/5hUOX-2ES82s_0zvI9BUdg</li>
<li>[2014-08-20 13:19:14,011][INFO ][cluster.service          ] [Jackpot] new_master [Jackpot][5hUOX-2ES82s_0zvI9BUdg][Impala][inet[/61.x.x.x:9301]], reason: zen-disco-join (elected_as_master)</li>
<li>[2014-08-20 13:19:14,060][INFO ][http                     ] [Jackpot] bound_address {inet[/0.0.0.0:9201]}, publish_address {inet[/61.x.x.x:9201]}</li>
<li>[2014-08-20 13:19:14,061][INFO ][node                     ] [Jackpot] started</li>
<li>[2014-08-20 13:19:14,106][INFO ][gateway                  ] [Jackpot] recovered [0] indices into cluster_state</li>
<li></li>
<li></li>
<li>[2014-08-20 13:20:58,273][INFO ][node                     ] [Jackpot] stopping &#8230;</li>
<li>[2014-08-20 13:20:58,323][INFO ][node                     ] [Jackpot] stopped</li>
<li>[2014-08-20 13:20:58,323][INFO ][node                     ] [Jackpot] closing &#8230;</li>
<li>[2014-08-20 13:20:58,332][INFO ][node                     ] [Jackpot] closed</li>
</ol>
</div>
<p>ctrl+c退出</p>
<p><strong>以后台方式运行</strong><br />
elasticsearch/bin/elasticsearch -d</p>
<p><strong>访问默认的9200端口</strong><br />
curl -X GET http://localhost:9200</p>
<div class="hl-surround">
<ol class="hl-main ln-show" title="Double click to hide line number.">
<li class="hl-firstline">{</li>
<li>  &#8220;status&#8221; : 200,</li>
<li>  &#8220;name&#8221; : &#8220;Steve Rogers&#8221;,</li>
<li>  &#8220;version&#8221; : {</li>
<li>    &#8220;number&#8221; : &#8220;1.3.2&#8221;,</li>
<li>    &#8220;build_hash&#8221; : &#8220;dee175dbe2f254f3f26992f5d7591939aaefd12f&#8221;,</li>
<li>    &#8220;build_timestamp&#8221; : &#8220;2014-08-13T14:29:30Z&#8221;,</li>
<li>    &#8220;build_snapshot&#8221; : false,</li>
<li>    &#8220;lucene_version&#8221; : &#8220;4.9&#8221;</li>
<li>  },</li>
<li>  &#8220;tagline&#8221; : &#8220;You Know, for Search&#8221;</li>
<li>}</li>
</ol>
</div>
<h1>安装logstash</h1>
<p>http://logstash.net/</p>
<div class="hl-surround">
<ol class="hl-main ln-show" title="Double click to hide line number.">
<li class="hl-firstline">wget https://download.elasticsearch.org/logstash/logstash/logstash-1.4.2.tar.gz</li>
<li>tar zxvf logstash-1.4.2.tar.gz</li>
<li>mv logstash-1.4.2 /usr/local</li>
<li>cd /usr/local</li>
<li>ln -s logstash-1.4.2 logstash</li>
<li>mkdir logstash/conf</li>
<li>chown -R root:root logstash</li>
</ol>
</div>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2016/01/logstash.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/01/logstash.png" alt="logstash" width="304" height="486" /></a></p>
<p>因为java的默认heap size,回收机制等原因,logstash从1.4.0开始不再使用jar运行方式.<br />
以前方式:<br />
java -jar logstash-1.3.3-flatjar.jar agent -f logstash.conf<br />
现在方式:<br />
bin/logstash agent -f logstash.conf</p>
<p>logstash下载即可使用，命令行参数可以参考logstash flags，主要有<br />
http://logstash.net/docs/1.2.1/flags</p>
<h1>安装kibana</h1>
<p>logstash的最新版已经内置kibana，你也可以单独部署kibana。kibana3是纯粹JavaScript+html的客户端，所以可以部署到任意http服务器上。<br />
http://www.elasticsearch.org/overview/elkdownloads/</p>
<div class="hl-surround">
<ol class="hl-main ln-show" title="Double click to hide line number.">
<li class="hl-firstline">wget https://download.elasticsearch.org/kibana/kibana/kibana-3.1.0.tar.gz</li>
<li>tar zxvf kibana-3.1.0.tar.gz</li>
<li>mv kibana-3.1.0 /opt/htdocs/www/kibana</li>
<li>vi /opt/htdocs/www/kibana/config.js</li>
</ol>
</div>
<p>配置elasticsearch源<br />
elasticsearch: “http://”+window.location.hostname+”:9200″,</p>
<p><strong>加入iptables</strong><br />
6379为redis端口,9200为elasticsearch端口,118.x.x.x/16为当前测试时的客户端ip</p>
<div class="hl-surround">
<ol class="hl-main ln-show" title="Double click to hide line number.">
<li class="hl-firstline">iptables -A INPUT -p tcp -m tcp -s 118.x.x.x/16 &#8211;dport 9200 &#8211;j ACCEPT</li>
</ol>
</div>
<p><strong>测试运行前端输出</strong><br />
bin/logstash -e ‘input { stdin { } } output { stdout {} }’</p>
<p><strong>输入hello测试 </strong><br />
2014-08-20T05:17:02.876+0000 Impala hello</p>
<p><strong>测试运行输出到后端</strong><br />
bin/logstash -e ‘input { stdin { } } output { elasticsearch { host =&gt; localhost } }’</p>
<p><strong>访问kibana</strong><br />
http://adminimpala.campusapply.com/kibana/index.html#/dashboard/file/default.json<br />
Yes- Great! We have a prebuilt dashboard: (<a href="http://adminimpala.campusapply.com/kibana/index.html#/dashboard/file/logstash.json">Logstash Dashboard</a>). See the note to the right about making it your global default</p>
<p>No results There were no results because no indices were found that match your selected time span</p>
<p><strong>设置kibana读取源</strong><br />
在kibana的右上角有个 configure dashboard,再进入Index Settings<br />
[logstash-]YYYY.MM.DD<br />
这个需和logstash的输出保持一致</p>
<p><strong>elasticsearch 跟 MySQL 中定义资料格式的角色关系对照表如下</strong></p>
<p>MySQL elasticsearch<br />
database index<br />
table type</p>
<p>table schema mapping<br />
row document<br />
field field</p>
<h1>ELK整合</h1>
<p><strong>syslog-ng.conf</strong></p>
<div class="hl-surround">
<ol class="hl-main ln-show" title="Double click to hide line number.">
<li class="hl-firstline">#省略其它内容</li>
<li></li>
<li># Remote logging syslog</li>
<li>source s_remote {</li>
<li>        udp(ip(192.168.0.39) port(514));</li>
<li>};</li>
<li></li>
<li>#nginx log</li>
<li>source s_remotetcp {</li>
<li>        tcp(ip(192.168.0.39) port(514) log_fetch_limit(100) log_iw_size(50000) max-connections(50) );</li>
<li>};</li>
<li></li>
<li>filter f_filter12     { program(&#8216;c1gstudio\.com&#8217;); };</li>
<li></li>
<li>#logstash syslog</li>
<li>destination d_logstash_syslog { udp(&#8220;localhost&#8221; port(10999) localport(10998)  ); };</li>
<li></li>
<li>#logstash web</li>
<li>destination d_logstash_web { tcp(&#8220;localhost&#8221; port(10997) localport(10996) ); };</li>
<li></li>
<li>log { source(s_remote); destination(d_logstash_syslog); };</li>
<li></li>
<li>log { source(s_remotetcp); filter(f_filter12); destination(d_logstash_web); };</li>
</ol>
</div>
<p><strong>logstash_syslog.conf</strong></p>
<div class="hl-surround">
<ol class="hl-main ln-show" title="Double click to hide line number.">
<li class="hl-firstline">input {</li>
<li>  udp {</li>
<li>    port =&gt; 10999</li>
<li>    type =&gt; syslog</li>
<li>  }</li>
<li>}</li>
<li>filter {</li>
<li>  if [type] == &#8220;syslog&#8221; {</li>
<li>    grok {</li>
<li>      match =&gt; { &#8220;message&#8221; =&gt; &#8220;%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}&#8221; }</li>
<li>      add_field =&gt; [ &#8220;received_at&#8221;, &#8220;%{@timestamp}&#8221; ]</li>
<li>      add_field =&gt; [ &#8220;received_from&#8221;, &#8220;%{host}&#8221; ]</li>
<li>    }</li>
<li>    syslog_pri { }</li>
<li>    date {</li>
<li>      match =&gt; [ &#8220;syslog_timestamp&#8221;, &#8220;MMM  d HH:mm:ss&#8221;, &#8220;MMM dd HH:mm:ss&#8221; ]</li>
<li>    }</li>
<li>  }</li>
<li>}</li>
<li></li>
<li>output {</li>
<li>  elasticsearch {</li>
<li>  host =&gt; localhost</li>
<li>  index =&gt; &#8220;syslog-%{+YYYY}&#8221;</li>
<li>}</li>
<li>}</li>
</ol>
</div>
<p><strong>logstash_redis.conf</strong></p>
<div class="hl-surround">
<ol class="hl-main ln-show" title="Double click to hide line number.">
<li class="hl-firstline">input {</li>
<li>  tcp {</li>
<li>    port =&gt; 10997</li>
<li>    type =&gt; web</li>
<li>  }</li>
<li>}</li>
<li>filter {</li>
<li>  grok {</li>
<li>    match =&gt; [ &#8220;message&#8221;, &#8220;%{SYSLOGTIMESTAMP:syslog_timestamp} (?:%{SYSLOGFACILITY:syslog_facility} )?%{SYSLOGHOST:syslog_source} %{PROG:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{IPORHOST:clientip} &#8211; (?:%{USER:remote_user}|-) \[%{HTTPDATE:timestamp}\] \&#8221;%{WORD:method} %{URIPATHPARAM:request} HTTP/%{NUMBER:httpversion}\&#8221; %{NUMBER:status} (?:%{NUMBER:body_bytes_sent}|-) \&#8221;(?:%{URI:http_referer}|-)\&#8221; %{QS:agent} (?:%{IPV4:http_x_forwarded_for}|-)&#8221;]</li>
<li>    remove_field =&gt; [ &#8216;@version&#8217;,&#8217;host&#8217;,&#8217;syslog_timestamp&#8217;,&#8217;syslog_facility&#8217;,&#8217;syslog_pid&#8217;]</li>
<li>  }</li>
<li>  date {</li>
<li>    match =&gt; [ &#8220;timestamp&#8221; , &#8220;dd/MMM/yyyy:HH:mm:ss Z&#8221; ]</li>
<li>  }</li>
<li>   useragent {</li>
<li>        source =&gt; &#8220;agent&#8221;</li>
<li>        prefix =&gt; &#8220;useragent_&#8221;</li>
<li>        remove_field =&gt; [ &#8220;useragent_device&#8221;, &#8220;useragent_major&#8221;, &#8220;useragent_minor&#8221; ,&#8221;useragent_patch&#8221;,&#8221;useragent_os&#8221;,&#8221;useragent_os_major&#8221;,&#8221;useragent_os_minor&#8221;]</li>
<li>    }</li>
<li>   geoip {</li>
<li>        source =&gt; &#8220;clientip&#8221;</li>
<li>        fields =&gt; [&#8220;country_name&#8221;, &#8220;region_name&#8221;, &#8220;city_name&#8221;, &#8220;real_region_name&#8221;, &#8220;latitude&#8221;, &#8220;longitude&#8221;]</li>
<li>        remove_field =&gt; [ &#8220;[geoip][longitude]&#8221;, &#8220;[geoip][latitude]&#8221;,&#8221;location&#8221;,&#8221;region_name&#8221; ]</li>
<li>    }</li>
<li>}</li>
<li></li>
<li>output {</li>
<li>  #stdout { codec =&gt; rubydebug }</li>
<li> redis {</li>
<li> batch =&gt; true</li>
<li> batch_events =&gt; 500</li>
<li> batch_timeout =&gt; 5</li>
<li> host =&gt; &#8220;127.0.0.1&#8221;</li>
<li> data_type =&gt; &#8220;list&#8221;</li>
<li> key =&gt; &#8220;logstash:web&#8221;</li>
<li> workers =&gt; 2</li>
<li> }</li>
<li>}</li>
</ol>
</div>
<p><strong>logstash_web.conf</strong></p>
<div class="hl-surround">
<ol class="hl-main ln-show" title="Double click to hide line number.">
<li class="hl-firstline">input {</li>
<li>  redis {</li>
<li>    host =&gt; &#8220;127.0.0.1&#8221;</li>
<li>    port =&gt; &#8220;6379&#8221;</li>
<li>    key =&gt; &#8220;logstash:web&#8221;</li>
<li>    data_type =&gt; &#8220;list&#8221;</li>
<li>    codec  =&gt; &#8220;json&#8221;</li>
<li>    type =&gt; &#8220;web&#8221;</li>
<li>  }</li>
<li>}</li>
<li></li>
<li>output {</li>
<li>  elasticsearch {</li>
<li>  flush_size =&gt; 5000</li>
<li>  host =&gt; localhost</li>
<li>  idle_flush_time =&gt; 10</li>
<li>  index =&gt; &#8220;web-%{+YYYY.MM.dd}&#8221;</li>
<li>  }</li>
<li>  #stdout { codec =&gt; rubydebug }</li>
<li>}</li>
</ol>
</div>
<p><strong>启动elasticsearch和logstash</strong><br />
/usr/local/elasticsearch/bin/elasticsearch -d</p>
<p>/usr/local/logstash/bin/logstash agent -f /usr/local/logstash/conf/logstash_syslog.conf &amp;<br />
/usr/local/logstash/bin/logstash agent -f /usr/local/logstash/conf/logstash_redis.conf &amp;<br />
/usr/local/logstash/bin/logstash agent -f /usr/local/logstash/conf/logstash_web.conf &amp;</p>
<p><strong>关闭</strong><br />
ps aux|egrep ‘search|logstash’<br />
kill pid</p>
<p><strong>安装控制器elasticsearch-servicewrapper</strong><br />
如果是在服务器上就可以使用elasticsearch-servicewrapper这个es插件，它支持通过参数，指定是在后台或前台运行es，并且 支持启动，停止，重启es服务（默认es脚本只能通过ctrl+c关闭es）。使用方法是到https://github.com /elasticsearch/elasticsearch-servicewrapper下载service文件夹，放到es的bin目录下。下面是命 令集合：<br />
bin/service/elasticsearch +<br />
console 在前台运行es<br />
start 在后台运行es<br />
stop 停止es<br />
install 使es作为服务在服务器启动时自动启动<br />
remove 取消启动时自动启动</p>
<p>vi /usr/local/elasticsearch/service/elasticsearch.conf<br />
set.default.ES_HOME=/usr/local/elasticsearch</p>
<h1>命令示例</h1>
<p><strong>查看状态</strong><br />
http://61.x.x.x:9200/_status?pretty=true</p>
<p><strong>集群健康查看</strong><br />
http://61.x.x.x:9200/_cat/health?v<br />
epoch timestamp cluster status node.total node.data shards pri relo init unassign<br />
1409021531 10:52:11 elasticsearch yellow 2 1 20 20 0 0 20</p>
<p><strong>列出集群索引</strong><br />
http://61.x.x.x:9200/_cat/indices?v<br />
health index pri rep docs.count docs.deleted store.size pri.store.size<br />
yellow web-2014.08.25 5 1 5990946 0 3.6gb 3.6gb<br />
yellow kibana-int 5 1 2 0 20.7kb 20.7kb<br />
yellow syslog-2014 5 1 709 0 585.6kb 585.6kb<br />
yellow web-2014.08.26 5 1 1060326 0 712mb 712mb</p>
<p><strong>删除索引</strong><br />
curl -XDELETE ‘http://localhost:9200/kibana-int/’<br />
curl -XDELETE ‘http://localhost:9200/logstash-2014.08.*’</p>
<p><strong>优化索引</strong><br />
$ curl -XPOST ‘http://localhost:9200/old-index-name/_optimize’</p>
<p><strong>查看日志</strong><br />
tail /usr/local/elasticsearch/logs/elasticsearch.log</p>
<div class="hl-surround">
<ol class="hl-main ln-show" title="Double click to hide line number.">
<li class="hl-firstline">2.4mb]-&gt;[2.4mb]/[273mb]}{[survivor] [3.6mb]-&gt;[34.1mb]/[34.1mb]}{[old] [79.7mb]-&gt;[80mb]/[682.6mb]}</li>
<li>[2014-08-26 10:37:14,953][WARN ][monitor.jvm              ] [Red Shift] [gc][young][71044][54078] duration [43s], collections [1]/[46.1s], total [43s]/[26.5m], memory [384.7mb]-&gt;[123mb]/[989.8mb], all_pools {[young] [270.5mb]-&gt;[1.3mb]/[273mb]}{[survivor] [34.1mb]-&gt;[22.3mb]/[34.1mb]}{[old] [80mb]-&gt;[99.4mb]/[682.6mb]}</li>
<li>[2014-08-26 10:38:03,619][WARN ][monitor.jvm              ] [Red Shift] [gc][young][71082][54080] duration [6.6s], collections [1]/[9.1s], total [6.6s]/[26.6m], memory [345.4mb]-&gt;[142.1mb]/[989.8mb], all_pools {[young] [224.2mb]-&gt;[2.8mb]/[273mb]}{[survivor] [21.8mb]-&gt;[34.1mb]/[34.1mb]}{[old] [99.4mb]-&gt;[105.1mb]/[682.6mb]}</li>
<li>[2014-08-26 10:38:10,109][INFO ][cluster.service          ] [Red Shift] removed {[logstash-Impala-26670-2010][av8JOuEoR_iK7ZO0UaltqQ][Impala][inet[/61.x.x.x:9302]]{client=true, data=false},}, reason: zen-disco-node_failed([logstash-Impala-26670-2010][av8JOuEoR_iK7ZO0UaltqQ][Impala][inet[/61.x.x.x:9302]]{client=true, data=false}), reason transport disconnected (with verified connect)</li>
<li>[2014-08-26 10:39:37,899][WARN ][monitor.jvm              ] [Red Shift] [gc][young][71171][54081] duration [3.4s], collections [1]/[4s], total [3.4s]/[26.6m], memory [411.7mb]-&gt;[139.5mb]/[989.8mb], all_pools {[young] [272.4mb]-&gt;[1.5mb]/[273mb]}{[survivor] [34.1mb]-&gt;[29.1mb]/[34.1mb]}{[old] [105.1mb]-&gt;[109mb]/[682.6mb]}</li>
</ol>
</div>
<p><strong>安装bigdesk</strong><br />
要想知道整个插件的列表，请访问http://www.elasticsearch.org/guide/reference/modules /plugins/ 插件还是很多的，个人认为比较值得关注的有以下几个，其他的看你需求，比如你要导入数据当然就得关注river了。</p>
<p>该插件可以查看集群的jvm信息，磁盘IO，索引创建删除信息等，适合查找系统瓶颈，监控集群状态等，可以执行如下命令进行安装，或者访问项目地址:https://github.com/lukas-vlcek/bigdesk</p>
<p>bin/plugin -install lukas-vlcek/bigdesk</p>
<div class="hl-surround">
<ol class="hl-main ln-show" title="Double click to hide line number.">
<li class="hl-firstline">Downloading &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;DONE</li>
<li>Installed lukas-vlcek/bigdesk into /usr/local/elasticsearch/plugins/bigdesk</li>
<li>Identified as a _site plugin, moving to _site structure &#8230;</li>
</ol>
</div>
<p>cp -ar plugins/bigdesk/_site/ /opt/htdocs/www/bigdesk<br />
<strong>访问</strong><br />
http://localhost/bigdesk</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2016/01/bigdesk-2.0.0-SNAPSHOT.jpg"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/01/bigdesk-2.0.0-SNAPSHOT.jpg" alt="bigdesk-2.0.0-SNAPSHOT" width="980" height="763" /></a></p>
<h1>安全优化</h1>
<p>1.安全漏洞,影响ElasticSearch 1.2及以下版本 http://bouk.co/blog/elasticsearch-rce/<br />
/usr/local/elasticsearch/config/elasticsearch.yml<br />
script.disable_dynamic: true</p>
<p>2.如果有多台机器，可以以每台设置n个shards的方式，根据业务情况，可以考虑取消replias<br />
这里设置默认的5个shards, 复制为0，shards定义后不能修改,replicas可以动态修改<br />
/usr/local/elasticsearch/config/elasticsearch.yml<br />
index.number_of_shards: 5<br />
index.number_of_replicas: 0</p>
<p>#定义数据目录(可选)<br />
path.data: /opt/elasticsearch</p>
<p>3.内存适当调大，初始是-Xms256M, 最大-Xmx1G,-Xss256k，<br />
调大后，最小和最大一样，避免GC, 并根据机器情况，设置内存大小，<br />
vi /usr/local/elasticsearch/bin/elasticsearch.in.sh<br />
if [ “x$ES_MIN_MEM” = “x” ]; then<br />
#ES_MIN_MEM=256m<br />
ES_MIN_MEM=2g<br />
fi<br />
if [ “x$ES_MAX_MEM” = “x” ]; then<br />
#ES_MAX_MEM=1g<br />
ES_MAX_MEM=2g<br />
fi</p>
<p>4.减少shard刷新间隔<br />
curl -XPUT ‘http://61.x.x.x:9200/dw-search/_settings’ -d ‘{<br />
“index” : {<br />
“refresh_interval” : “-1”<br />
}<br />
}’</p>
<p>完成bulk插入后再修改为初始值<br />
curl -XPUT ‘http://61.x.x.x:9200/dw-search/_settings’ -d ‘{<br />
“index” : {<br />
“refresh_interval” : “1s”<br />
}<br />
}’</p>
<p>/etc/elasticsearch/elasticsearch.yml<br />
tranlog数据达到多少条进行平衡，默认为5000,刷新频率，默认为120s<br />
index.translog.flush_threshold_ops: “100000”<br />
index.refresh_interval: 60s</p>
<p>5.关闭文件的更新时间</p>
<p>/etc/fstab</p>
<p>在文件中添加 noatime,nodiratime<br />
/dev/sdc1 /data1 ext4 noatime,nodiratime 0 0</p>
<p>自启动<br />
chkconfig add redis_6379<br />
vi /etc/rc.local<br />
/usr/local/elasticsearch/bin/elasticsearch -d<br />
/usr/local/logstash/bin/logstash agent -f /usr/local/logstash/conf/logstash_syslog.conf &amp;<br />
/usr/local/logstash/bin/logstash agent -f /usr/local/logstash/conf/logstash_redis.conf &amp;<br />
/usr/local/logstash/bin/logstash agent -f /usr/local/logstash/conf/logstash_web.conf &amp;<br />
/opt/lemp startnginx</p>
<h1>安装问题</h1>
<p>==========================================<br />
LoadError: Could not load FFI Provider: (NotImplementedError) FFI not available: null<br />
See http://jira.codehaus.org/browse/JRUBY-4583</p>
<p>一开始我以为是没有FFI,把jruby,ruby gem都装了一遍.<br />
实际是由于我的/tmp没有运行权限造成的,建个tmp目录就可以了,附上ruby安装步骤.</p>
<p>mkdir /usr/local/jdk/tmp</p>
<p>vi /usr/local/logstash/bin/logstash.lib.sh<br />
JAVA_OPTS=”$JAVA_OPTS -Djava.io.tmpdir=/usr/local/jdk/tmp”</p>
<p>===============================<br />
jruby 安装</p>
<div class="hl-surround">
<ol class="hl-main ln-show" title="Double click to hide line number.">
<li class="hl-firstline">wget http://jruby.org.s3.amazonaws.com/downloads/1.7.13/jruby-bin-1.7.13.tar.gz</li>
<li>mv jruby-1.7.13 /usr/local/</li>
<li>cd /usr/local/</li>
<li>ln -s jruby-1.7.13 jruby</li>
</ol>
</div>
<p>Ruby Gem 安装<br />
Ruby 1.9.2版本默认已安装Ruby Gem<br />
安装gem 需要ruby的版本在 1.8.7 以上，默认的centos5 上都是1.8.5 版本，所以首先你的升级你的ruby ，</p>
<p>ruby -v<br />
ruby 1.8.5 (2006-08-25) [x86_64-linux]
<div class="hl-surround">
<ol class="hl-main ln-show" title="Double click to hide line number.">
<li class="hl-firstline">wget http://cache.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p547.tar.gz</li>
<li>tar zxvf ruby-1.9.3-p547.tar.gz</li>
<li>cd ruby-1.9.3-p547</li>
<li>./configure &#8211;prefix=/usr/local/ruby-1.9.3-p547</li>
<li>make &amp;&amp; make install</li>
<li>cd /usr/local</li>
<li>ln -s ruby-1.9.3-p547 ruby</li>
</ol>
</div>
<p>vi /etc/profile<br />
export PATH=$JAVA_HOME/bin:/usr/local/ruby/bin:$PATH<br />
source /etc/profile</p>
<p>gem install bundler<br />
gem install i18n<br />
gem install ffi</p>
<p>=======================</p>
<p>elasticsearch 端口安全<br />
绑定内网ip</p>
<p>iptables 只开放内网</p>
<p>前端机反向代理<br />
server<br />
{<br />
listen 9201;<br />
server_name big.c1gstudio.com;<br />
index index.html index.htm index.php;<br />
root /opt/htdocs/www;<br />
include manageip.conf;<br />
deny all;</p>
<p>location / {<br />
proxy_pass http://192.168.0.39:9200;<br />
proxy_set_header Host $host;<br />
proxy_set_header X-Real-IP $remote_addr;<br />
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;<br />
#proxy_set_header X-Forwarded-For $remote_addr;<br />
add_header X-Cache Cache-156;<br />
proxy_redirect off;<br />
}</p>
<p>access_log /opt/nginx/logs/access.log access;<br />
}</p>
<p>kibana的config.js<br />
elasticsearch: “http://”+window.location.hostname+”:9201″,</p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e5%bc%80%e6%ba%90%e5%88%86%e5%b8%83%e5%bc%8f%e6%90%9c%e7%b4%a2%e5%b9%b3%e5%8f%b0elkelasticsearchlogstashkibanaredissyslog-ng%e5%ae%9e%e7%8e%b0%e6%97%a5%e5%bf%97%e5%ae%9e%e6%97%b6%e6%90%9c/">开源分布式搜索平台ELK(Elasticsearch+Logstash+Kibana)+Redis+Syslog-ng实现日志实时搜索</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></content:encoded>
			<wfw:commentRss>https://www.fuwuqiok.com/%e5%bc%80%e6%ba%90%e5%88%86%e5%b8%83%e5%bc%8f%e6%90%9c%e7%b4%a2%e5%b9%b3%e5%8f%b0elkelasticsearchlogstashkibanaredissyslog-ng%e5%ae%9e%e7%8e%b0%e6%97%a5%e5%bf%97%e5%ae%9e%e6%97%b6%e6%90%9c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>安装MySQL中间层 Atlas实现不改程序就能读写分离</title>
		<link>https://www.fuwuqiok.com/%e5%ae%89%e8%a3%85mysql%e4%b8%ad%e9%97%b4%e5%b1%82-atlas%e5%ae%9e%e7%8e%b0%e4%b8%8d%e6%94%b9%e7%a8%8b%e5%ba%8f%e5%b0%b1%e8%83%bd%e8%af%bb%e5%86%99%e5%88%86%e7%a6%bb/</link>
		<comments>https://www.fuwuqiok.com/%e5%ae%89%e8%a3%85mysql%e4%b8%ad%e9%97%b4%e5%b1%82-atlas%e5%ae%9e%e7%8e%b0%e4%b8%8d%e6%94%b9%e7%a8%8b%e5%ba%8f%e5%b0%b1%e8%83%bd%e8%af%bb%e5%86%99%e5%88%86%e7%a6%bb/#comments</comments>
		<pubDate>Sun, 10 Jan 2016 13:29:59 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[服务器迁移]]></category>
		<category><![CDATA[网站防挂马]]></category>
		<category><![CDATA[安装MySQL中间层 Atlas实现不改程序就能读写分离]]></category>
		<category><![CDATA[服务器基础环境搭建]]></category>
		<category><![CDATA[阿里云代维]]></category>

		<guid isPermaLink="false">https://www.fuwuqiok.com/?p=2874</guid>
		<description><![CDATA[<p>Atlas是由 Qihoo 360, Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目 [&#8230;]</p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e5%ae%89%e8%a3%85mysql%e4%b8%ad%e9%97%b4%e5%b1%82-atlas%e5%ae%9e%e7%8e%b0%e4%b8%8d%e6%94%b9%e7%a8%8b%e5%ba%8f%e5%b0%b1%e8%83%bd%e8%af%bb%e5%86%99%e5%88%86%e7%a6%bb/">安装MySQL中间层 Atlas实现不改程序就能读写分离</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></description>
				<content:encoded><![CDATA[<p><a href="https://github.com/Qihoo360/Atlas/">Atlas</a>是由 Qihoo 360, Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上，修改了大量bug，添加了很多功能特性。目前该项目在360公司内部得到了广泛应用，很多MySQL业务已经接入了Atlas平 台，每天承载的读写请求数达几十亿条。</p>
<p>主要功能：<br />
* 读写分离<br />
* 从库负载均衡<br />
* IP过滤<br />
* SQL语句黑白名单<br />
* 自动分表</p>
<p>Q &amp; A<br />
——————-<br />
Q: 是否支持多字符集？<br />
A: 这是我们对原版MySQL-Proxy的第一项改进，符合国情是必须的</p>
<p>Q: 自动读写分离挺好，但有时候我写完马上就想读，万一主从同步延迟怎么办?<br />
A: SQL语句前增加 /*master*/ 就可以将读请求强制发往主库</p>
<p>Q: 主库宕机，读操作受影响么？<br />
A: 在atlas中是不会的! 能问这样的问题, 说明你用过官方的mysql-proxy, 很遗憾官方版本并未解决这个问题</p>
<p>Q: 检测后端DB状态会阻塞正常请求么？<br />
A: 不会, atlas中检测线程是异步进行检测的，即使有db宕机，也不会阻塞主流程。在atlas中没有什么异常会让主流程阻塞! 同上，官方版本也会让你失望</p>
<p>Q: 想下线一台DB, 又不想停掉mysql server, 怎么办？<br />
A: 可以通过管理接口手动上下线后端db, atlas会优先考虑管理员的意愿</p>
<p>Q: 想给集群中增加一台DB, 不想影响线上正常访问可以吗？<br />
A: 通过管理接口可以轻松实现</p>
<p>Q: 相比官方mysql-proxy, atlas还有哪些改进？<br />
A: 这实在是个难以回答的问题，性能，稳定性，可靠性，易维护性，我们做过几十项的改进，下面会尽量列一些较大的改动</p>
<p>VS 官方MySQL-Proxy<br />
——————-<br />
1. 将主流程中所有Lua代码改为纯C实现，Lua仅用在管理接口<br />
2. 重写网络模型、线程模型<br />
3. 实现了真正意义的连接池<br />
4. 优化了锁机制，性能提高数十倍<br />
……</p>
<p>附名字来源：<br />
Atlas，希腊神话中双肩撑天的巨人，普罗米修斯的兄弟，最高大强壮的神之一，因反抗宙斯失败而被罚顶天。我们期望这个系统能够脚踏后端DB，为前端应用撑起一片天。</p>
<p>一.安装dbproxy altas<br />
https://github.com/Qihoo360/Atlas/wiki/Atlas%E7%9A%84%E5%AE%89%E8%A3%85</p>
<p>wget https://github.com/Qihoo360/Atlas/releases/download/2.2.1/Atlas-2.2.1.el5.x86_64.rpm<br />
rpm –ivh Atlas-2.2.1.el5.x86_64.rpm</p>
<p>注意事项：</p>
<p>(1).Atlas只能安装运行在64位的系统上。</p>
<p>(2).Centos 5.X安装 Atlas-XX.el5.x86_64.rpm，Centos 6.X安装Atlas-XX.el6.x86_64.rpm。</p>
<p>(3).如果执行sudo rpm –i Atlas-XX.el6.x86_64.rpm，提示类似：“file /usr/local/mysql-proxy/bin/encrypt from install of Atlas-2.0.1-1.x86_64 conflicts with file from package Atlas-1.0.3-1.x86_64”错误，则表示该系统之前已经安装过Atlas-1.0.3-1.x86_64，需要执行：sudo rpm –e Atlas-1.0.3-1.x86_64，将之前安装的Atlas删除掉，再执行sudo rpm –i Atlas-XX.el6.x86_64.rpm安装新版本的Atlas。</p>
<p>(4).后端mysql版本应大于5.1，建议使用Mysql 5.6</p>
<p>二.配置文件修改<br />
cd /usr/local/mysql-proxy/conf<br />
cp tests.cnf dbproxy.cnf<br />
vi dbproxy.cnf</p>
<p>Atlas运行需要依赖一个配置文件（test.cnf）。在运行Atlas之前，需要对该文件进行配置。Atlas的安装目录是/usr /local/mysql-proxy，进入安装目录下的conf目录，可以看到已经有一个名为test.cnf的默认配置文件，我们只需要修改里面的某 些配置项，不需要从头写一个配置文件。</p>
<p>1.配置范例及说明如下：</p>
[mysql-proxy]
<p>(必备，默认值即可)管理接口的用户名</p>
<p>admin-username = user</p>
<p>(必备，默认值即可)管理接口的密码</p>
<p>admin-password = pwd</p>
<p>(必备，根据实际情况配置)主库的IP和端口</p>
<p>proxy-backend-addresses = 192.168.0.12:3306</p>
<p>(非必备，根据实际情况配置)从库的IP和端口，@后面的数字代表权重，用来作负载均衡，若省略则默认为1，可设置多项，用逗号分隔。如果想让主库也能分担读请求的话，只需要将主库信息加入到下面的配置项中。</p>
<p>proxy-read-only-backend-addresses = 192.168.0.12:3306@2,192.168.0.13:3306@4,192.168.0.14:3306@4</p>
<p>(必备，根据实际情况配置)用户名与其对应的加密过的MySQL密码，密码使用PREFIX/bin目录下的加密程序encrypt加密，用户名与 密码之间用冒号分隔。主从数据库上需要先创建该用户并设置密码（用户名和密码在主从数据库上要一致）。比如用户名为myuser，密码为mypwd，执 行./encrypt mypwd结果为HJBoxfRsjeI=。如果有多个用户用逗号分隔即可。则设置如下行所示：</p>
<p>pwds = dbproxy: /iZxz+0GRoA=</p>
<p>（必备，默认值即可)Atlas的运行方式，设为true时为守护进程方式，设为false时为前台方式，一般开发调试时设为false，线上运行时设为true</p>
<p>daemon = true</p>
<p>(必备，默认值即可)设置Atlas的运行方式，设为true时Atlas会启动两个进程，一个为monitor，一个为 worker，monitor在worker意外退出后会自动将其重启，设为false时只有worker，没有monitor，一般开发调试时设为 false，线上运行时设为true</p>
<p>keepalive = true</p>
<p>(必备，根据实际情况配置)工作线程数，推荐设置成系统的CPU核数的2至4倍</p>
<p>event-threads = 4</p>
<p>(必备，默认值即可)日志级别，分为message、warning、critical、error、debug五个级别</p>
<p>log-level = message</p>
<p>(必备，默认值即可)日志存放的路径</p>
<p>log-path = /usr/local/mysql-proxy/log</p>
<p>(必备，根据实际情况配置)SQL日志的开关，可设置为OFF、ON、REALTIME，OFF代表不记录SQL日志，ON代表记录SQL日志，该 模式下日志刷新是基于缓冲区的，当日志填满缓冲区后，才将日志信息刷到磁盘。REALTIME用于调试，代表记录SQL日志且实时写入磁盘，默认为OFF</p>
<p>sql-log = OFF</p>
<p>(可选项，可不设置）慢日志输出设置。当设置了该参数时，则日志只输出执行时间超过sql-log-slow（单位：ms)的日志记录。不设置该参数则输出全部日志。</p>
<p>#sql-log-slow = 10</p>
<p>(可选项，可不设置）关闭不活跃的客户端连接设置。当设置了该参数时，Atlas会主动关闭经过’wait-timeout’时间后一直未活跃的连接。单位：秒</p>
<p>wait-timeout = 10</p>
<p>(必备，默认值即可)Atlas监听的工作接口IP和端口</p>
<p>proxy-address = 0.0.0.0:1234</p>
<p>(必备，默认值即可)Atlas监听的管理接口IP和端口 admin-address = 0.0.0.0:2345</p>
<p>(可选项，可不设置)分表设置，此例中person为库名，mt为表名，id为分表字段，3为子表数量，可设置多项，以逗号分隔，若不分表则不需要 设置该项，子表需要事先建好，子表名称为表名_数字，数字范围为[0,子表数-1]，如本例里，子表名称为mt_0、mt_1、mt_2</p>
<p>#tables = person.mt.id.3</p>
<p>(可选项，可不设置)默认字符集，若不设置该项，则默认字符集为latin1</p>
<p>#charset = utf8</p>
<p>(可选项，可不设置)允许连接Atlas的客户端的IP，可以是精确IP，也可以是IP段，以逗号分隔，若不设置该项则允许所有IP连接，否则只允许列表中的IP连接</p>
<p>client-ips = 127.0.0.1, 192.168.1</p>
<p>(可选项，极少需要)Atlas前面挂接的LVS的物理网卡的IP(注意不是虚IP)，若有LVS且设置了client-ips则此项必须设置，否则可以不设置</p>
<p>#lvs-ips = 192.168.1.1</p>
<p>2. 重要配置说明</p>
<p>以下几项配置参数对性能和正常运行起到重要作用，需要正确设置。</p>
<p>(1)线程数</p>
<p>event-threads项设置，过小无法充分发挥多核CPU的性能，过大造成不必要的线程切换开销，推荐设置为CPU的核数。</p>
<p>(2)最小空闲连接数(2.x以上版本不需要该项，1.x版本需要)</p>
<p>min-idle-connections项设置，过小则在高并发下会有报错，过大虽然不报错但在测试时不容易看出读写分离效果，推荐设置为比客户 端的并发峰值稍大，详见《配置参数详解》。上面的配置范例是针对Atlas 2.X版本，没有该选项。对于Atlas 1.X版本的配置文件，需要加入该配置选项。</p>
<p>3. 可选配置说明</p>
<p>以下几项可以设置，也可以使用默认值，区别不大。</p>
<p>(1)Atlas的工作端口</p>
<p>proxy-address项配置，例如proxy-address = 0.0.0.0:1234代表客户端应该使用1234这个端口连接Atlas来发送SQL请求。</p>
<p>(2)Atlas的管理端口</p>
<p>admin-address项配置，例如admin-address = 0.0.0.0:2345代表DBA应该使用2345这个端口连接Atlas来执行运维管理操作。</p>
<p>(3)管理接口的用户名和密码</p>
<p>admin-username项和admin-password项设置，这两项是用来进入Atlas的管理界面的，与后端连接的MySQL没有关系，所以可以任意设置，不需要MySQL在配置上做任何改动。</p>
<p>(4)日志级别</p>
<p>以log-level项配置，分为message、warning、critical、error、debug五个级别。</p>
<p>(5)日志路径</p>
<p>以log-path项配置，如log-path = /usr/local/mysql-proxy/log。</p>
<p>三. 给后端mysql增加访问用户<br />
CREATE USER ‘dbproxy’@’192.168.0.11’ IDENTIFIED BY ‘***’;</p>
<p>GRANT USAGE ON * . * TO ‘dbproxy’@’192.168.0.11’ IDENTIFIED BY ‘***’ WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;<br />
GRANT SELECT , INSERT , UPDATE , DELETE , LOCK TABLES ON `c1gstudio` . * TO ‘dbproxy’@’192.168.0.11’;</p>
<p>加密密码<br />
bin/encrypt 123456<br />
/iZxz+0GRoA=</p>
<p>添加iptables<br />
iptables<br />
iptables -A INPUT -s 192.168.0.0/255.255.255.0 -p tcp -m tcp –dport 1234 -j ACCEPT</p>
<p>四.启动<br />
1.启动dbproxy<br />
cd /home/mysql/dbproxy/bin<br />
./mysql-proxyd dbproxy start</p>
<p># /usr/local/mysql-proxy/bin/mysql-proxyd dbproxy start<br />
# /usr/local/mysql-proxy/bin/mysql-proxyd dbproxy stop<br />
# /usr/local/mysql-proxy/bin/mysql-proxyd dbproxy restart</p>
<p>2.访问测试<br />
mysql -udbproxy -h192.168.0.11 -P1234 -p<br />
password<br />
mysql-&gt; show databases;<br />
mysql&gt; show variables like “server_id”;<br />
+—————+——-+<br />
| Variable_name | Value |<br />
+—————+——-+<br />
| server_id | 19 |<br />
+—————+——-+<br />
1 row in set (0.00 sec)</p>
<p>mysql&gt; show variables like “server_id”;<br />
+—————+——-+<br />
| Variable_name | Value |<br />
+—————+——-+<br />
| server_id | 20 |<br />
+—————+——-+<br />
1 row in set (0.00 sec)</p>
<p>五、Atlas管理接口使用</p>
<p># mysql -u管理用户 -p管理密码 -h127.0.0.1 -P管理端口<br />
mysql -uadmin -h192.168.0.11 -P2345 -p<br />
password<br />
#查看管理语句参数：<br />
mysql&gt; select * from help;<br />
+—————————-+———————————————————+<br />
| command | description |<br />
+—————————-+———————————————————+<br />
| SELECT * FROM help | shows this help |<br />
| SELECT * FROM backends | lists the backends and their state |<br />
| SET OFFLINE $backend_id | offline backend server, $backend_id is backend_ndx’s id |<br />
| SET ONLINE $backend_id | online backend server, … |<br />
| ADD MASTER $backend | example: “add master 127.0.0.1:3306”, … |<br />
| ADD SLAVE $backend | example: “add slave 127.0.0.1:3306”, … |<br />
| REMOVE BACKEND $backend_id | example: “remove backend 1”, … |<br />
| SELECT * FROM clients | lists the clients |<br />
| ADD CLIENT $client | example: “add client 192.168.1.2”, … |<br />
| REMOVE CLIENT $client | example: “remove client 192.168.1.2”, … |<br />
| SELECT * FROM pwds | lists the pwds |<br />
| ADD PWD $pwd | example: “add pwd user:raw_password”, … |<br />
| ADD ENPWD $pwd | example: “add enpwd user:encrypted_password”, … |<br />
| REMOVE PWD $pwd | example: “remove pwd user”, … |<br />
| SAVE CONFIG | save the backends to config file |<br />
| SELECT VERSION | display the version of Atlas |<br />
+—————————-+———————————————————+<br />
#查看DB状态：<br />
mysql&gt; select * from backends;<br />
+————-+——————-+——-+——+<br />
| backend_ndx | address | state | type |<br />
+————-+——————-+——-+——+<br />
| 1 | 192.168.0.12:3306 | up | rw |<br />
| 2 | 192.168.0.12:3306 | up | ro |<br />
| 3 | 192.168.0.13:3306 | up | ro |<br />
| 4 | 192.168.0.14:3306 | up | ro |<br />
+————-+——————-+——-+——+</p>
<p>六.性能测试结果<br />
从Atlas处理三类SQL操作的QPS和完成每条SQL操作的时间对比来看，将event-threads参数设置为CPU个数的2-4倍较为合理。将 event-threads参数设置为CPU个数的两倍时，带来的QPS提升较为明显，将其设置为CPU个数的四倍时，QPS也有提升但不是非常明显。对 于处理每条SQL操作的时间，通过提高event-threads值是没有显著效果的。</p>
<p>所以我们建议使用者：如果追求Atlas处理SQL请求时的QPS，将event-threads值设置为CPU个数的2-4倍。如果追求Atlas处理SQL请求的完成时间，将event-threads值设置为CPU个数即可。</p>
<p>下文主要测试了通过Atlas转发SQL请求与直连DB发送SQL请求这两种情形下的性能差距，和event-threads值对Atlas的性能 影响。从测试结果来看，Atlas性能表现较为优秀，并没有明显的性能下降。同时在测试中发现Atlas系统属于CPU密集型任务，相对于磁盘IO和内存 占用率而言，Atlas对CPU消耗显得最为明显，所以建议在部署Atlas的时候需要优先考虑服务器的CPU性能。</p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e5%ae%89%e8%a3%85mysql%e4%b8%ad%e9%97%b4%e5%b1%82-atlas%e5%ae%9e%e7%8e%b0%e4%b8%8d%e6%94%b9%e7%a8%8b%e5%ba%8f%e5%b0%b1%e8%83%bd%e8%af%bb%e5%86%99%e5%88%86%e7%a6%bb/">安装MySQL中间层 Atlas实现不改程序就能读写分离</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></content:encoded>
			<wfw:commentRss>https://www.fuwuqiok.com/%e5%ae%89%e8%a3%85mysql%e4%b8%ad%e9%97%b4%e5%b1%82-atlas%e5%ae%9e%e7%8e%b0%e4%b8%8d%e6%94%b9%e7%a8%8b%e5%ba%8f%e5%b0%b1%e8%83%bd%e8%af%bb%e5%86%99%e5%88%86%e7%a6%bb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>阿里云ECS编译升级VM内核到4.x</title>
		<link>https://www.fuwuqiok.com/%e9%98%bf%e9%87%8c%e4%ba%91ecs%e7%bc%96%e8%af%91%e5%8d%87%e7%ba%a7vm%e5%86%85%e6%a0%b8%e5%88%b04-x/</link>
		<comments>https://www.fuwuqiok.com/%e9%98%bf%e9%87%8c%e4%ba%91ecs%e7%bc%96%e8%af%91%e5%8d%87%e7%ba%a7vm%e5%86%85%e6%a0%b8%e5%88%b04-x/#comments</comments>
		<pubDate>Sun, 10 Jan 2016 13:14:08 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[服务器迁移]]></category>
		<category><![CDATA[系统安全代维]]></category>
		<category><![CDATA[网站代维]]></category>
		<category><![CDATA[服务器基础环境搭建]]></category>
		<category><![CDATA[阿里云ECS编译升级VM内核到4.x]]></category>

		<guid isPermaLink="false">https://www.fuwuqiok.com/?p=2859</guid>
		<description><![CDATA[<p>今天没事通过编译的方法，测试了一下centos7.x系统下降3.x内核升级到4.x，记录一下。以前阿里云的EC [&#8230;]</p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e9%98%bf%e9%87%8c%e4%ba%91ecs%e7%bc%96%e8%af%91%e5%8d%87%e7%ba%a7vm%e5%86%85%e6%a0%b8%e5%88%b04-x/">阿里云ECS编译升级VM内核到4.x</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></description>
				<content:encoded><![CDATA[<p>今天没事通过编译的方法，测试了一下centos7.x系统下降3.x内核升级到4.x，记录一下。以前阿里云的ECS是不可以升级内核的，实际阿 里云centos5.8以上的系统，就支持yum升级内核了。只是内核升级是一件有风险的事情，特别是在定制的非标准硬件的云环境下，所以<a href="http://help.aliyun.com/knowledge_detail.htm?knowledgeId=5975061">阿里云ECS购买须知</a>也明确提醒，不要轻易升级内核。<br />
<span id="more-538"></span>操作有风险，请做好快照备份。下面是操作过程：</p>
<p>查看当前系统版本centos7.0；内核版本：3.10.0；</p>
<pre class="brush: shell; auto-links: false;">[root@iZ28yx1yevuZ ~]# lsb_release -a
LSB Version:    :core-4.1-amd64:core-4.1-noarch
Distributor ID: CentOS
Description:    CentOS Linux release 7.0.1406 (Core)
Release:        7.0.1406
Codename:       Core
[root@iZ28yx1yevuZ ~]# uname -r
3.10.0-123.9.3.el7.x86_64</pre>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2016/01/1.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/01/1.png" alt="1" width="484" height="130" /></a><br />
前往kernel.org下载目前最新的内核版本：</p>
<pre class="brush: shell; auto-links: false;">[root@iZ28yx1yevuZ ~]#wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.1.6.tar.xz;mv linux-4.1.6.tar.xz /usr/src
[root@iZ28yx1yevuZ ~]#cd /usr/src;tar -xf linux-4.1.6.tar.xz</pre>
<div>解压压缩包，并通过make menuconfig方式编译，如下，出现报错：</div>
<div><a href="https://www.fuwuqiok.com/wp-content/uploads/2016/01/21.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/01/21.png" alt="21" width="726" height="135" /></a></div>
<div></div>
<div>
<p>这是因为menuconfig需要ncurses-devel 支持，下面安装ncurses-devel后重新编译就可以了</p>
<pre class="brush: shell; auto-links: false;">root@iZ28yx1yevuZ ~]# yum install ncurses-devel -y</pre>
<div><a href="https://www.fuwuqiok.com/wp-content/uploads/2016/01/3.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/01/3.png" alt="3" width="648" height="387" /></a></div>
<div></div>
<div>由于阿里云目前大部分机器还是xen环境的，所以阿里云环境下编译和普通系统相比，需要增加xen guest support，如下（menuconfig下如果找不到配置，可以个vi一样，通过”/”方式搜索）：</div>
<div>注意：这些模块需要built-in，也就是复选框内需要是*，而不是M</div>
<div></div>
<div>
<div>Processor type and features-&gt;Linux guest support-&gt;Xen guest support</div>
<div><a href="https://www.fuwuqiok.com/wp-content/uploads/2016/01/4.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/01/4.png" alt="4" width="636" height="386" /></a></div>
<div> Device Drivers  —&gt; Block devices  —&gt; Xen virtual block device support<br />
Device Drivers  —&gt; Block devices  —&gt;  Xen block-device backend driver</div>
<div> <a href="https://www.fuwuqiok.com/wp-content/uploads/2016/01/5.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/01/5.png" alt="5" width="650" height="375" /></a></div>
<div></div>
<div>
<div>Device Drivers  —&gt;Xen driver support  把下面的选项建议都选上</div>
</div>
<div></div>
<div><a href="https://www.fuwuqiok.com/wp-content/uploads/2016/01/6.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/01/6.png" alt="6" width="638" height="372" /></a></div>
<div> 网络方面的驱动：</div>
<div>
<p>Device Drivers  —&gt; Network device support  —&gt; Xen network device frontend driver<br />
Device Drivers  —&gt; Network device support  —&gt;  Xen backend network device</p>
</div>
<div><a href="https://www.fuwuqiok.com/wp-content/uploads/2016/01/7.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/01/7.png" alt="7" width="642" height="371" /></a></div>
<div></div>
<div></div>
<div>
<p>完成后开始编译，这里使用vzImage编译后的核心是压缩的。</p>
<pre class="brush: shell; auto-links: false;">[root@iZ28yx1yevuZ ~]#make -j 16 bzImage</pre>
<p>（这个过程会非常的漫长，为了防止终端意外断开导致前功尽弃，这里建议在screen下执行操作。我测试服务器是16核，所以这里制定了16个job加速编译）</p>
</div>
</div>
<div><a href="https://www.fuwuqiok.com/wp-content/uploads/2016/01/8.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/01/8.png" alt="8" width="593" height="313" /></a></div>
<div></div>
<div>可以看到16core都是跑满状态<a href="https://www.fuwuqiok.com/wp-content/uploads/2016/01/9.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/01/9.png" alt="9" width="728" height="389" /></a></div>
<div></div>
<div>完成后依次编译模块，安装</div>
<pre class="brush: shell; auto-links: false;">[root@iZ28yx1yevuZ ~]#make -j16 modules
[root@iZ28yx1yevuZ ~]#make -j16 modules_install
[root@iZ28yx1yevuZ ~]#make -j16 install</pre>
<div><a href="https://www.fuwuqiok.com/wp-content/uploads/2016/01/10.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/01/10.png" alt="10" width="491" height="83" /></a></div>
<div></div>
<div></div>
<div> 完成后看一下grub文件，目前有三个引导项目：</div>
<div>
<pre class="brush: shell; auto-links: false;">root@iZ28yx1yevuZ ~]#cat /etc/grub2.cfg |egrep ^menuentry</pre>
</div>
<div> <a href="https://www.fuwuqiok.com/wp-content/uploads/2016/01/11.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/01/11.png" alt="11" width="718" height="164" /></a></div>
<div>看一下目前的默认引导项是3.10.0内核</div>
<div>
<pre class="brush: shell; auto-links: false;">root@iZ28yx1yevuZ linux-4.1.6]# grub2-editenv list
saved_entry=CentOS Linux (3.10.0-123.9.3.el7.x86_64) 7 (Core)</pre>
<div>将默认引导内核改为我们刚安装的4.1.6版本</p>
<pre class="brush: shell; auto-links: false;">[root@iZ28yx1yevuZ linux-4.1.6]# grub2-set-default "CentOS Linux (4.1.6) 7 (Core)"</pre>
<div>目前默认引导项是最新的内核了，这时候重启测试</div>
<pre class="brush: shell; auto-links: false;">root@iZ28yx1yevuZ linux-4.1.6]# grub2-editenv list
saved_entry=CentOS Linux (4.1.6) 7 (Core)
[root@iZ28yx1yevuZ linux-4.1.6]# reboot</pre>
<div>默认选择的是4.1.6内核</div>
<div><a href="https://www.fuwuqiok.com/wp-content/uploads/2016/01/12.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/01/12.png" alt="12" width="696" height="403" /></a></div>
<div></div>
<div>正常启动后测试，内核已经是最新的版本了。</div>
<div></div>
<div><a href="https://www.fuwuqiok.com/wp-content/uploads/2016/01/13.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/01/13.png" alt="13" width="608" height="112" /></a></div>
</div>
</div>
</div>
<p>&nbsp;</p>
<div class="wumii-hook"></div>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e9%98%bf%e9%87%8c%e4%ba%91ecs%e7%bc%96%e8%af%91%e5%8d%87%e7%ba%a7vm%e5%86%85%e6%a0%b8%e5%88%b04-x/">阿里云ECS编译升级VM内核到4.x</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></content:encoded>
			<wfw:commentRss>https://www.fuwuqiok.com/%e9%98%bf%e9%87%8c%e4%ba%91ecs%e7%bc%96%e8%af%91%e5%8d%87%e7%ba%a7vm%e5%86%85%e6%a0%b8%e5%88%b04-x/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>阿里云运维部署工具AppDeploy最佳实践</title>
		<link>https://www.fuwuqiok.com/%e9%98%bf%e9%87%8c%e4%ba%91%e8%bf%90%e7%bb%b4%e9%83%a8%e7%bd%b2%e5%b7%a5%e5%85%b7appdeploy%e6%9c%80%e4%bd%b3%e5%ae%9e%e8%b7%b5/</link>
		<comments>https://www.fuwuqiok.com/%e9%98%bf%e9%87%8c%e4%ba%91%e8%bf%90%e7%bb%b4%e9%83%a8%e7%bd%b2%e5%b7%a5%e5%85%b7appdeploy%e6%9c%80%e4%bd%b3%e5%ae%9e%e8%b7%b5/#comments</comments>
		<pubDate>Sun, 10 Jan 2016 12:57:36 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[服务器迁移]]></category>
		<category><![CDATA[网站代维]]></category>
		<category><![CDATA[服务器基础环境搭建]]></category>
		<category><![CDATA[阿里云代维]]></category>
		<category><![CDATA[阿里云运维部署工具AppDeploy最佳实践]]></category>

		<guid isPermaLink="false">https://www.fuwuqiok.com/?p=2847</guid>
		<description><![CDATA[<p>阿里云 AppDeploy版是一个通过SSH实现的流式命令行工具，可用于完成应用部署和远程运维管理，其工作于p [&#8230;]</p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e9%98%bf%e9%87%8c%e4%ba%91%e8%bf%90%e7%bb%b4%e9%83%a8%e7%bd%b2%e5%b7%a5%e5%85%b7appdeploy%e6%9c%80%e4%bd%b3%e5%ae%9e%e8%b7%b5/">阿里云运维部署工具AppDeploy最佳实践</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></description>
				<content:encoded><![CDATA[<div class="aly-article-con">
<p>阿里云 AppDeploy版是一个通过SSH实现的流式命令行工具，可用于完成应用部署和远程运维管理，其工作于python平台上，具有良好的可移植性；AppDeploy将本地应用软件上传到远端服务器，并执行用户预定义的产品部署命令。</p>
<p>工具当前免费下载使用，地址：<br />
<a href="http://market.aliyun.com/products/53690006/cmgj000331.html">http://market.aliyun.com/products/53690006/cmgj000331.html</a><br />
<a href="http://market.aliyun.com/products/53690006/cmgj000321.html">http://market.aliyun.com/products/53690006/cmgj000321.html</a></p>
<p>本文通过三个使用场景介绍AppDeploy：</p>
<p>1. 高效运维管理命令：<br />
1）实时监控服务器状态<br />
执行命令：$ adep check_status 将得到服务器的具体信息，包括ip、route、dns、resolve、iptables、mount、disk、load等；</p>
<p>::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::0</p>
<p>也可以在命令后面加具体参数查看部分信息，例如：<br />
当前支持：ip、route、dns、resolve、iptables、mount、disk、load；<br />
$ adep check_status:resolve</p>
<p>::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::1</p>
<p>$ adep check_status:disk</p>
<p>::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::2</p>
<p>2）实时监控服务器带宽<br />
在命令行执行 $ adepcheck_bandwidth 将会得到下面动态数据：</p>
<p>::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::3</p>
<p>其中红框内的数据分别为：<br />
提示按”e”字母退出监控状态：此处注意输入格式；<br />
服务器流入带宽实时数据（动态显示）：分别显示KB/s 和Mb/s两中常见数据格式；<br />
服务器流出带宽实时数据（动态显示）：分别显示KB/s 和Mb/s两中常见数据格式；</p>
<p>3）文件的上传下载：<br />
通过命令行类似shell命令的方式实现：<br />
具体操作的哪些服务器、用户名、密码信息由appdeploy.py文件定义；</p>
<p>文件上传命令格式：$ adep put:localfile,remoteFolder<br />
“put”、”:”、”localFile”、”,”、”remoteFolder”之间都没有空格；<br />
LocalFile：本地上传文件路径及名字，RemoteFolder：上传到服务器的具体目录；</p>
<p>文件下载命令格式：$ adep get:remoteFile,localFolder<br />
”get”、”:”、”remoteFile”、”,”、”localFolder”之间都没有空格；<br />
RemoteFile：从服务器上下载的文件名，localFolder：下载文件本地存放目录；<br />
例如：</p>
<p>::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::4</p>
<p>4）远程命令执行：<br />
通过命令行类似shell命令的方式实现：<br />
具体操作的哪些服务器、用户名、密码信息由appdeploy.py文件定义；</p>
<p>命令远程执行格式：$ adep run:shellCommand<br />
“run”、”:”、”shellCommand”之间都没有空格；<br />
ShellCommand：指远端执行的命令，有空格时要用引号引起来；</p>
<p>::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::5</p>
<p>5）一键更新服务器源<br />
命令行输入 $ adep update_source<br />
可以更新服务器端的源配置，支持Ubuntu、Centos、Redhat、Opensuse、Debian等系统的多个版本源更新功能；</p>
<p>::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::6</p>
<p>2. 一键部署Web服务器之Mysql + Nginx + PHP<br />
1）在appdeploy.py中输入以下定义<br />
def runtime():<br />
componets={“nginx” : “1.4.4″,<br />
“php” : “5.6.11″,<br />
“mysql” : “5.6.26″<br />
}<br />
install_runtime(componets)</p>
<p>2）在命令行执行下面命令，由于全部为源码安装，安装会占用相对较长时间。<br />
$ adep runtime</p>
<p>3）应用部署上线：上传您的PHP项目<br />
下面代码表示将本地PHP项目上传到服务器：/aliyun/www/phpwind目录；<br />
def deploy_php():<br />
put(“./php/*”, “/aliyun/www/phpwind/”)<br />
执行： $ adep deploy_php</p>
<p>4）检验应用部署效果</p>
<p>::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::7</p>
<p>3. 一键部署Web服务器之JDK + Mysql + Nginx + Tomcat<br />
1）在appdeploy.py中输入以下定义<br />
def runtime():<br />
componets={ “jdk” : “1.8.0″,<br />
“nginx” : “1.4.4″,<br />
“tomcat” : “7.0.63″,<br />
“mysql” : “5.6.26″<br />
}<br />
install_runtime(componets)</p>
<p>2）在命令行执行下面命令，由于全部为源码安装，会占用相对较长时间。<br />
$ adep runtime</p>
<p>3）应用部署：上传您的java项目<br />
下面任务会将本地java项目编译、打包、上传到服务器（基于Maven，appdeploy会自动检测您的maven程序是否安装，若没有安装，则会自动安装），最后上传到服务器的/aliyun/server/tomcat/webapps目录；<br />
def pack_deploy():<br />
componets={“plugin”: “maven”,<br />
“project_dir” : “./java/myFirstWebApp”,<br />
“web_dir” : “/aliyun/server/tomcat/webapps”<br />
}<br />
package(componets)<br />
deploy(componets)<br />
执行： $ adep pack_deploy</p>
<p>4）检验应用部署效果</p>
<p>::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::8</p>
</div>
<div class="aly-article-next">
<div></div>
</div>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e9%98%bf%e9%87%8c%e4%ba%91%e8%bf%90%e7%bb%b4%e9%83%a8%e7%bd%b2%e5%b7%a5%e5%85%b7appdeploy%e6%9c%80%e4%bd%b3%e5%ae%9e%e8%b7%b5/">阿里云运维部署工具AppDeploy最佳实践</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></content:encoded>
			<wfw:commentRss>https://www.fuwuqiok.com/%e9%98%bf%e9%87%8c%e4%ba%91%e8%bf%90%e7%bb%b4%e9%83%a8%e7%bd%b2%e5%b7%a5%e5%85%b7appdeploy%e6%9c%80%e4%bd%b3%e5%ae%9e%e8%b7%b5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>重用 SSH 连接</title>
		<link>https://www.fuwuqiok.com/%e9%87%8d%e7%94%a8-ssh-%e8%bf%9e%e6%8e%a5/</link>
		<comments>https://www.fuwuqiok.com/%e9%87%8d%e7%94%a8-ssh-%e8%bf%9e%e6%8e%a5/#comments</comments>
		<pubDate>Tue, 08 Dec 2015 14:04:21 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[aliyun服务器代维]]></category>
		<category><![CDATA[服务器迁移]]></category>
		<category><![CDATA[服务器基础环境搭建]]></category>
		<category><![CDATA[重用 SSH 连接]]></category>

		<guid isPermaLink="false">https://www.fuwuqiok.com/?p=2807</guid>
		<description><![CDATA[<p>平时需要经常用到 SSH，比如登录远程服务器，用 Git 推送和更新代码等。建立一次 SSH 连接可能并不需要 [&#8230;]</p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e9%87%8d%e7%94%a8-ssh-%e8%bf%9e%e6%8e%a5/">重用 SSH 连接</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></description>
				<content:encoded><![CDATA[<div class="entry-content">
<p>平时需要经常用到 SSH，比如登录远程服务器，用 Git 推送和更新代码等。建立一次 SSH 连接可能并不需要多久长时间，但是如果要频繁登录同一台服务器，就未免显得有些繁琐和浪费时间。如果是用用户名和密码登录，每次都要输入密码就更加让人崩 溃。还有使用 Git 的时候，短时间内可能需要经常 <code>git pull</code> 和 <code>git push</code>，如果每次操作都需要重新建立连接，等待过程就让人心生厌恶了。</p>
<p>实际上，SSH 有个「鲜为人知」的特性可以做到重用连接，只有在第一次登录的时候会创建新的连接，后续的会话都可以重用这个已经存在的连接。这样，后续的登录就会非常快，而且不需要输入密码认证。配置也很简单，直接上代码。</p>
<p>修改 <code>~/.ssh/config</code> 文件，添加如下配置：</p>
<pre><code class="language-sshconfig">Host *
    ControlMaster auto
    ControlPath /tmp/ssh_mux_%h_%p_%r
    ControlPersist 600
</code></pre>
<p>意思也很好理解：</p>
<p><code>Host *</code> 这一行表示下面这些配置和规则影响到的 host，<code>*</code> 表示所有的远程 host 都生效。如果要指定某个（些）特定的 host，可以使用类似 <code>Host *.example.com</code> 的配置。</p>
<p><code>ControlMaster auto</code> 这个选项告诉 SSH 客户端尝试重用现有的连接（master connection）。</p>
<p><code>ControlPath</code> 指定了这个连接的 socket 保存的路径，这里配置的是在 /tmp 目录，实际上可以在任何有读写权限的路径下。<code>/tmp/ssh_mux_%h_%p_%r</code> 配置了 socket 文件名，<code>%h</code> 表示远程主机名（host），<code>%p</code> 表示远程 SSH 服务器的端口（port），<code>%r</code> 表示登录的远程用户名（remote user name）。这些 socket 可以随时删掉（<code>rm</code>），删除后首次会话又会创建新的 master 连接。曾经遇到过这种情况，本地断网了，打开的几个远程终端都卡死，网络恢复后也一直这样，甚至打开新的终端也登录不上。这个时候只需要把之前的 socket 文件都删掉，重新登录就可以了。</p>
<p><code>ControlPersist</code> 这个选项比较重要，表示在创建首个连接（master connection）的会话退出后，master 连接仍然在后台保留，以便其他复用该连接的会话不会出现问题。这个特性在使用 Git 的时候就非常有用，在频繁提交和拉代码的时候，每次 SSH 会话都是很短暂的，如果 master 连接能保持在后台，后续的操作就会如丝般顺滑。</p>
<p>只需要添加上面几行配置，SSH 的体验就瞬间上升了好几个档次，简直是懒人必备。</p>
</div>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e9%87%8d%e7%94%a8-ssh-%e8%bf%9e%e6%8e%a5/">重用 SSH 连接</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></content:encoded>
			<wfw:commentRss>https://www.fuwuqiok.com/%e9%87%8d%e7%94%a8-ssh-%e8%bf%9e%e6%8e%a5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>给Nginx配置一个自签名的SSL证书</title>
		<link>https://www.fuwuqiok.com/%e7%bb%99nginx%e9%85%8d%e7%bd%ae%e4%b8%80%e4%b8%aa%e8%87%aa%e7%ad%be%e5%90%8d%e7%9a%84ssl%e8%af%81%e4%b9%a6/</link>
		<comments>https://www.fuwuqiok.com/%e7%bb%99nginx%e9%85%8d%e7%bd%ae%e4%b8%80%e4%b8%aa%e8%87%aa%e7%ad%be%e5%90%8d%e7%9a%84ssl%e8%af%81%e4%b9%a6/#comments</comments>
		<pubDate>Tue, 08 Dec 2015 13:44:12 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[服务器迁移]]></category>
		<category><![CDATA[服务器基础环境搭建]]></category>
		<category><![CDATA[给Nginx配置一个自签名的SSL证书]]></category>

		<guid isPermaLink="false">https://www.fuwuqiok.com/?p=2805</guid>
		<description><![CDATA[<p>要保证Web浏览器到服务器的安全连接，HTTPS几乎是唯一选择。HTTPS其实就是HTTP over SSL， [&#8230;]</p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e7%bb%99nginx%e9%85%8d%e7%bd%ae%e4%b8%80%e4%b8%aa%e8%87%aa%e7%ad%be%e5%90%8d%e7%9a%84ssl%e8%af%81%e4%b9%a6/">给Nginx配置一个自签名的SSL证书</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></description>
				<content:encoded><![CDATA[<div class="x-article-content">
<p>要保证Web浏览器到服务器的安全连接，HTTPS几乎是唯一选择。HTTPS其实就是HTTP over SSL，也就是让HTTP连接建立在SSL安全连接之上。</p>
<p>SSL使用证书来创建安全连接。有两种验证模式：</p>
<ol>
<li>仅客户端验证服务器的证书，客户端自己不提供证书；</li>
<li>客户端和服务器都互相验证对方的证书。</li>
</ol>
<p>显然第二种方式安全性更高，一般用网上银行会这么搞，但是，普通的Web网站只能采用第一种方式。</p>
<p>客户端如何验证服务器的证书呢？服务器自己的证书必须经过某“权威”证书的签名，而这个“权威”证书又可能经过更权威的证书签名，这么一级一级追溯上去，最顶层那个最权威的证书就称为根证书。根证书直接内置在浏览器中，这样，浏览器就可以利用自己自带的根证书去验证某个服务器的证书是否有效。</p>
<p>如果要提供一个有效的证书，服务器的证书必须从VeriSign这样的证书颁发机构签名，这样，浏览器就可以验证通过，否则，浏览器给出一个证书无效的警告。</p>
<p>申请一个证书签名的费用是一年几十~几百刀不等，所以如果只是出于管理目的，可以创建自签名证书，保证管理员通过浏览器安全连接到服务器。</p>
<p>下面简单介绍如何创建一个自签名的SSL证书。</p>
<p>创建自签名证书需要安装openssl，使用以下步骤：</p>
<ol>
<li>创建Key；</li>
<li>创建签名请求；</li>
<li>将Key的口令移除；</li>
<li>用Key签名证书。</li>
</ol>
<p>为HTTPS准备的证书需要注意，创建的签名请求的CN必须与域名完全一致，否则无法通过浏览器验证。</p>
<p>以上步骤命令繁琐，所以我做了一个shell脚本，能一次性把证书搞定。从这里下载脚本：</p>
<p><a href="https://github.com/michaelliao/itranswarp.js/blob/master/conf/ssl/gencert.sh" target="_blank">https://github.com/michaelliao/itranswarp.js/blob/master/conf/ssl/gencert.sh</a></p>
<p>运行脚本，假设你的域名是<code>www.test.com</code>，那么按照提示输入：</p>
<pre><code class="sql">$ ./gencert.sh 
Enter your domain [www.example.com]: www.test.com          
<span class="operator"><span class="keyword">Create</span> server <span class="keyword">key</span>...
Generating RSA private <span class="keyword">key</span>, <span class="number">1024</span> <span class="keyword">bit</span> long modulus
.................++++++
.....++++++
e <span class="keyword">is</span> <span class="number">65537</span> (<span class="number">0x10001</span>)
Enter pass phrase <span class="keyword">for</span> www.test.com.<span class="keyword">key</span>:输入口令
Verifying - Enter pass phrase <span class="keyword">for</span> www.test.com.<span class="keyword">key</span>:输入口令
<span class="keyword">Create</span> server certificate signing request...
Enter pass phrase <span class="keyword">for</span> www.test.com.<span class="keyword">key</span>:输入口令
Remove password...
Enter pass phrase <span class="keyword">for</span> www.test.com.origin.<span class="keyword">key</span>:输入口令
writing RSA <span class="keyword">key</span>
Sign SSL certificate...
Signature ok
subject=/C=US/ST=Mars/L=iTranswarp/O=iTranswarp/OU=iTranswarp/CN=www.test.com
Getting Private <span class="keyword">key</span>
TODO:
Copy www.test.com.crt <span class="keyword">to</span> /etc/nginx/ssl/www.test.com.crt
Copy www.test.com.<span class="keyword">key</span> <span class="keyword">to</span> /etc/nginx/ssl/www.test.com.<span class="keyword">key</span>
<span class="keyword">Add</span> configuration <span class="keyword">in</span> nginx:
server {
    ...
    ssl <span class="keyword">on</span>;</span>
    ssl_certificate     /etc/nginx/ssl/www.test.com.crt;
    ssl_certificate_key /etc/nginx/ssl/www.test.com.key;
}
</code></pre>
<p>红色部分是输入，注意4次输入的口令都是一样的。</p>
<p>在当前目录下会创建出4个文件：</p>
<ul>
<li>www.test.com.crt：自签名的证书</li>
<li>www.test.com.csr：证书的请求</li>
<li>www.test.com.key：不带口令的Key</li>
<li>www.test.com.origin.key：带口令的Key</li>
</ul>
<p>Web服务器需要把<code>www.test.com.crt</code>发给浏览器验证，然后用<code>www.test.com.key</code>解密浏览器发送的数据，剩下两个文件不需要上传到Web服务器上。</p>
<p>以Nginx为例，需要在<code>server {...}</code>中配置：</p>
<pre><code class="undefined">server {
    ...
    ssl on;
    ssl_certificate     /etc/nginx/ssl/www.test.com.crt;
    ssl_certificate_key /etc/nginx/ssl/www.test.com.key;
}
</code></pre>
<p>如果一切顺利，打开浏览器，就可以通过HTTPS访问网站。第一次访问时会出现警告（因为我们的自签名证书不被浏览器信任），把证书通过浏览器导入到系统（Windows使用IE导入，Mac使用Safari导入）并设置为“受信任”，以后该电脑访问网站就可以安全地连接Web服务器了：</p>
<p>&nbsp;</p>
<p>如何在应用服务器中配置证书呢？例如Tomcat，gunicorn等。正确的做法是不配置，让Nginx处理HTTPS，然后通过proxy以HTTP连接后端的应用服务器，相当于利用Nginx作为HTTPS到HTTP的安全代理，这样即利用了Nginx的HTTP/HTTPS处理能力，又避免了应用服务器不擅长HTTPS的缺点。</p>
</div>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e7%bb%99nginx%e9%85%8d%e7%bd%ae%e4%b8%80%e4%b8%aa%e8%87%aa%e7%ad%be%e5%90%8d%e7%9a%84ssl%e8%af%81%e4%b9%a6/">给Nginx配置一个自签名的SSL证书</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></content:encoded>
			<wfw:commentRss>https://www.fuwuqiok.com/%e7%bb%99nginx%e9%85%8d%e7%bd%ae%e4%b8%80%e4%b8%aa%e8%87%aa%e7%ad%be%e5%90%8d%e7%9a%84ssl%e8%af%81%e4%b9%a6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nginx 配置 SSL 证书 + 搭建 HTTPS 网站教程</title>
		<link>https://www.fuwuqiok.com/nginx-%e9%85%8d%e7%bd%ae-ssl-%e8%af%81%e4%b9%a6-%e6%90%ad%e5%bb%ba-https-%e7%bd%91%e7%ab%99%e6%95%99%e7%a8%8b/</link>
		<comments>https://www.fuwuqiok.com/nginx-%e9%85%8d%e7%bd%ae-ssl-%e8%af%81%e4%b9%a6-%e6%90%ad%e5%bb%ba-https-%e7%bd%91%e7%ab%99%e6%95%99%e7%a8%8b/#comments</comments>
		<pubDate>Fri, 06 Nov 2015 04:33:36 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[Nginx 配置 SSL 证书 + 搭建 HTTPS 网站教程]]></category>
		<category><![CDATA[服务器基础环境搭建]]></category>

		<guid isPermaLink="false">https://www.fuwuqiok.com/?p=2750</guid>
		<description><![CDATA[<p>基于OpenSSL自建CA和颁发SSL证书 openssl是一个开源程序的套件、这个套件有三个部分组成：一是l [&#8230;]</p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/nginx-%e9%85%8d%e7%bd%ae-ssl-%e8%af%81%e4%b9%a6-%e6%90%ad%e5%bb%ba-https-%e7%bd%91%e7%ab%99%e6%95%99%e7%a8%8b/">Nginx 配置 SSL 证书 + 搭建 HTTPS 网站教程</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></description>
				<content:encoded><![CDATA[<h1 class="title">基于OpenSSL自建CA和颁发SSL证书</h1>
<p>openssl是一个开源程序的套件、这个套件有三个部分组成：一是<code>libcryto</code>，这是一个具有通用功能的加密库，里面实现了众多的加密库；二是<code>libssl</code>，这个是实现ssl机制的，它是用于实现TLS/SSL的功能；三是openssl，是个多功能命令行工具，它可以实现加密解密，甚至还可以当CA来用，可以让你创建证书、吊销证书。</p>
<p>默认情况ubuntu和CentOS上都已安装好openssl。CentOS 6.x 上有关ssl证书的目录结构：</p>
<div class="line">/etc/pki/CA/</div>
<div class="line">newcerts 存放CA签署（颁发）过的数字证书（证书备份目录）</div>
<div class="line">private 用于存放CA的私钥</div>
<div class="line">crl 吊销的证书</div>
<div class="line"></div>
<div class="line">/etc/pki/tls/</div>
<div class="line">cert.pem 软链接到certs/<span class="keyword">ca</span>-bundle.crt</div>
<div class="line">certs/ 该服务器上的证书存放目录，可以房子自己的证书和内置证书</div>
<div class="line"><span class="keyword">ca</span>-bundle.crt 内置信任的证书</div>
<div class="line">private 证书密钥存放目录</div>
<div class="line">openssl.<span class="keyword">cnf</span> openssl的CA主配置文件</div>
<div class="line"></div>
<div class="line">
<h1 id="1-_颁发证书">1. 颁发证书</h1>
<h2 id="1-1_修改CA的一些配置文件">1.1 修改CA的一些配置文件</h2>
<p>CA要给别人颁发证书，首先自己得有一个作为根证书，我们得在一切工作之前修改好CA的配置文件、序列号、索引等等。</p>
<p><strong><code>vi /etc/pki/tls/openssl.cnf</code></strong>：</p>
<div class="line"><span class="keyword">&#8230;</span></div>
<div class="line">[ CA_default ]</div>
<div class="line">dir = /etc/pki/CA <span class="comment"># Where everything is kept</span></div>
<div class="line">certs = $dir/certs <span class="comment"># Where the issued certs are kept</span></div>
<div class="line">crl_dir = $dir/crl <span class="comment"># Where the issued crl are kept</span></div>
<div class="line">database = $dir/index.txt <span class="comment"># database index file.</span></div>
<div class="line"><span class="comment">#unique_subject = no # Set to &#8216;no&#8217; to allow creation of</span></div>
<div class="line"><span class="comment"># several ctificates with same subject.</span></div>
<div class="line">new_certs_dir = $dir/newcerts <span class="comment"># default place for new certs.</span></div>
<div class="line">certificate = $dir/cacert.pem <span class="comment"># The CA certificate</span></div>
<div class="line">serial = $dir/serial <span class="comment"># The current serial number</span></div>
<div class="line">crlnumber = $dir/crlnumber <span class="comment"># the current crl number</span></div>
<div class="line"><span class="comment"># must be commented out to leave a V1 CRL</span></div>
<div class="line">crl = $dir/crl.pem <span class="comment"># The current CRL</span></div>
<div class="line">private_key = $dir/private/cakey.pem <span class="comment"># The private key</span></div>
<div class="line">RANDFILE = $dir/private/.rand <span class="comment"># private random number file</span></div>
<div class="line"><span class="keyword">&#8230;</span></div>
<div class="line">default_days = <span class="number">3650</span> <span class="comment"># how long to certify for</span></div>
<div class="line"><span class="keyword">&#8230;</span></div>
<div class="line"><span class="comment"># For the CA policy</span></div>
<div class="line">[ policy_match ]</div>
<div class="line">countryName = match</div>
<div class="line">stateOrProvinceName = optional</div>
<div class="line">localityName = optional</div>
<div class="line">organizationName = optional</div>
<div class="line">organizationalUnitName = optional</div>
<div class="line">commonName = supplied</div>
<div class="line">emailAddress = optional</div>
<div class="line"><span class="keyword">&#8230;</span></div>
<div class="line">[ req_distinguished_name ]</div>
<div class="line">countryName = Country Name (<span class="number">2</span> letter code)</div>
<div class="line">countryName_default = CN</div>
<div class="line">countryName_min = <span class="number">2</span></div>
<div class="line">countryName_max = <span class="number">2</span></div>
<div class="line">stateOrProvinceName = State or Province Name (full name)</div>
<div class="line">stateOrProvinceName_default = GD</div>
<div class="line"><span class="keyword">&#8230;</span></div>
<div class="line">[ req_distinguished_name ] 部分主要是颁证时一些默认的值，可以不动</div>
</div>
<div class="line"></div>
<div class="line">一定要注意<code>[ policy_match ]</code>中的设定的匹配规则，是有可能因为证书使用的工具不一样，导致即使设置了csr中看起来有相同的countryName,stateOrProvinceName等，但在最终生成证书时依然报错：</div>
<div class="line"></div>
<div class="line">
<div class="line">Using configuration <span class="built_in">from</span> /usr/lib/ssl/openssl.cnf</div>
<div class="line">Check that <span class="operator">the</span> request matches <span class="operator">the</span> signature</div>
<div class="line">Signature ok</div>
<div class="line">The stateOrProvinceName field needed <span class="built_in">to</span> be <span class="operator">the</span> same <span class="operator">in</span> <span class="operator">the</span></div>
<div class="line">CA certificate (GuangDong) <span class="operator">and</span> <span class="operator">the</span> request (GuangDong)</div>
<div class="line"></div>
<div class="line"><strong>自定义证书配置步骤如下：</strong></div>
<div class="line"></div>
</div>
<div class="line"><strong><code>touch index.txt serial</code></strong>：<br />
在CA目录下创建两个初始文件：</div>
<div class="line"></div>
<div class="line">
<div class="line"><span class="preprocessor"># touch index.txt serial</span></div>
<div class="line"><span class="preprocessor"># echo 01 &gt; serial</span></div>
</div>
<div class="line">
<h2 id="1-2_生成根密钥">1.2 生成根密钥</h2>
<div class="line"><span class="preprocessor"># cd /etc/pki/CA/</span></div>
<div class="line"><span class="preprocessor"># openssl genrsa -out private/cakey.pem 2048</span></div>
<div class="line">
<p>为了安全起见，修改cakey.pem私钥文件权限为600或400，也可以使用子shell生成<code>( umask 077; openssl genrsa -out private/cakey.pem 2048 )</code>，下面不再重复。</p>
<h2 id="1-3_生成根证书">1.3 生成根证书</h2>
<p>使用req命令生成自签证书：</p>
<pre># openssl req -<span class="keyword">new</span> -x509 -key <span class="keyword">private</span>/cakey.pem -<span class="keyword">out</span> cacert.pem</pre>
<p>会提示输入一些内容，因为是私有的，所以可以随便输入（之前修改的openssl.cnf会在这里呈现），最好记住能与后面保持一致。上面的自签证书<code>cacert.pem</code>应该生成在<code>/etc/pki/CA</code>下。</p>
<h2 id="1-4_为我们的nginx_web服务器生成ssl密钥">1.4 为我们的nginx web服务器生成ssl密钥</h2>
<p>以上都是在CA服务器上做的操作，而且只需进行一次，现在转到nginx服务器上执行：</p>
<div class="line"><span class="preprocessor"># cd /etc/nginx/ssl</span></div>
<div class="line"><span class="preprocessor"># openssl genrsa -out nginx.key 2048</span></div>
<div class="line">
<p>这里测试的时候CA中心与要申请证书的服务器是同一个。</p>
<h2 id="1-5_为nginx生成证书签署请求">1.5 为nginx生成证书签署请求</h2>
<div class="line"><span class="comment"># openssl req -new -key nginx.key -out nginx.csr</span></div>
<div class="line"><span class="keyword">&#8230;</span></div>
<div class="line">Country Name (<span class="number">2</span> letter code) [AU]:CN</div>
<div class="line">State or Province Name (full name) [Some-State]:GD</div>
<div class="line">Locality Name (eg, city) []:SZ</div>
<div class="line">Organization Name (eg, company) [AWSOK Ltd]:COMPANY</div>
<div class="line">Organizational Unit Name (eg, section) []:devops</div>
<div class="line">Common Name (e.g. server FQDN or YOUR name) []:awsok.com</div>
<div class="line">Email Address []:</div>
<div class="line">Please enter the following <span class="string">&#8216;extra&#8217;</span> attributes</div>
<div class="line">to be sent with your certificate request</div>
<div class="line">A challenge password []:</div>
<div class="line">An optional company name []:</div>
<div class="line"><span class="keyword">&#8230;</span></div>
</div>
<div class="line">
<p>同样会提示输入一些内容，其它随便，除了<code>Commone Name</code>一定要是你要授予证书的服务器域名如awsok.com或主机名，challenge password不填。</p>
<h2 id="1-6_私有CA根据请求来签署证书">1.6 私有CA根据请求来签署证书</h2>
<p>接下来要把上一步生成的证书请求csr文件，发到CA服务器上，在CA上执行：</p>
</div>
<div class="line"># openssl ca -in nginx.csr -out nginx.crt</div>
<div class="line">另外在极少数情况下，上面的命令生成的证书不能识别，试试下面的命令：</div>
<div class="line"># openssl x509 -req -in server.csr -CA <span class="regexp">/etc/</span>pki<span class="regexp">/CA/</span>cacert.pem -CAkey <span class="regexp">/etc/</span>pki<span class="regexp">/CA/</span><span class="keyword">private</span><span class="regexp">/cakey.pem -CAcreateserial -out server.crt</span></div>
</div>
<div class="line">
<p>上面签发过程其实默认使用了<code>-cert cacert.pem -keyfile cakey.pem</code>，这两个文件就是前两步生成的位于<code>/etc/pki/CA</code>下的根密钥和根证书。将生成的crt证书发回nginx服务器使用。</p>
<p>到此我们已经拥有了建立ssl安全连接所需要的所有文件，并且服务器的crt和key都位于配置的目录下，剩下的是如何使用证书的问题。</p>
</div>
</div>
<h2>二、使用付费证书配置步骤</h2>
<p>由于只有浏览器或者系统信赖的 CA 才可以让所有的访问者通畅的访问你的加密网站，而不是出现证书错误的提示。所以我们跳过自签证书的步骤，直接开始签署第三方可信任的 SSL 证书吧。</p>
<p>OpenSSL 在 Linux、OS X 等常规的系统下默认都安装了，因为一些安全问题，一般现在的第三方 SSL 证书签发机构都要求起码 2048 位的 RSA 加密的私钥。</p>
<p>同时，普通的 SSL 证书认证分两种形式，一种是 DV（Domain Validated），还有一种是 OV （Organization Validated），前者只需要验证域名，后者需要验证你的组织或公司，在安全性方面，肯定是后者要好。</p>
<p>无论你用 DV 还是 OV 生成私钥，都需要填写一些基本信息，这里我们假设如下：</p>
<p>域名，也称为 Common Name，因为特殊的证书不一定是域名：<code>example.com</code></p>
<p>组织或公司名字（Organization）：<code>Example, Inc.</code></p>
<p>部门（Department）：可以不填写，这里我们写 <code>Web Security</code></p>
<p>城市（City）：<code>Beijing</code></p>
<p>省份（State / Province）：<code>Beijing</code></p>
<p>国家（Country）：<code>CN</code></p>
<p>加密强度：2048 位，如果你的机器性能强劲，也可以选择 4096 位</p>
<p>按照以上信息，使用 OpenSSL 生成 key 和 csr 的命令如下</p>
<pre><code>openssl req -new -newkey rsa:2048 -sha256 -nodes -out example_com.csr -keyout example_com.key -subj "/C=CN/ST=Beijing/L=Beijing/O=Example Inc./OU=Web Security/CN=example.com"  
</code></pre>
<p>PS：如果是泛域名证书，则应该填写 <code>*.example.com</code></p>
<p>你可以在系统的任何地方运行这个命令，会自动在当前目录生成 <code>example_com.csr</code> 和 <code>example_com.key</code> 这两个文件</p>
<p>接下来你可以查看一下 <code>example_com.csr</code>，得到类似这么一长串的文字</p>
<pre><code>-----BEGIN CERTIFICATE REQUEST-----
MIICujCCAaICAQAwdTELMAkGA1UEBhMCQ04xEDAOBgNVBAgTB0JlaWppbmcxEDAO  
BgNVBAcTB0JlaWppbmcxFTATBgNVBAoTDEV4YW1wbGUgSW5jLjEVMBMGA1UECxMM  
V2ViIFNlY3VyaXR5MRQwEgYDVQQDEwtleGFtcGxlLmNvbTCCASIwDQYJKoZIhvcN  
AQEBBQADggEPADCCAQoCggEBAPME+nvVCdGN9VWn+vp7JkMoOdpOurYMPvclIbsI  
iD7mGN982Ocl22O9wCV/4tL6DpTcXfNX+eWd7CNEKT4i+JYGqllqP3/CojhkemiY  
SF3jwncvP6VoST/HsZeMyNB71XwYnxFCGqSyE3QjxmQ9ae38H2LIpCllfd1l7iVp  
AX4i2+HvGTHFzb0XnmMLzq4HyVuEIMoYwiZX8hq+kwEAhKpBdfawkOcIRkbOlFew  
SEjLyHY+nruXutmQx1d7lzZCxut5Sm5At9al0bf5FOaaJylTEwNEpFkP3L29GtoU  
qg1t9Q8WufIfK9vXqQqwg8J1muK7kksnbYcoPnNgPx36kZsCAwEAAaAAMA0GCSqG  
SIb3DQEBBQUAA4IBAQCHgIuhpcgrsNwDuW6731/DeVwq2x3ZRqRBuj9/M8oONQen  
1QIacBifEMr+Ma+C+wIpt3bHvtXEF8cCAJAR9sQ4Svy7M0w25DwrwaWIjxcf/J8U  
audL/029CkAuewFCdBILTRAAeDqxsAsUyiBIGTIT+uqi+EpGG4OlyKK/MF13FxDj  
/oKyrSJDtp1Xr9R7iqGCs/Zl5qWmDaLN7/qxBK6vX2R/HLhOK0aKi1ZQ4cZeP7Mr
8EzjDIAko87Nb/aIsFyKrt6Ze3jOF0/vnnpw7pMvhq+folWdTVXddjd9Dpr2x1nc  
y5hnop4k6kVRXDjQ4OTduQq4P+SzU4hb41GIQEz4  
-----END CERTIFICATE REQUEST-----
</code></pre>
<p>&nbsp;</p>
<p>你需要提交 CSR 文件给第三方 SSL 认证机构，通过认证后，他们会颁发给你一个 CRT 文件，我们命名为 <code>example_com.crt</code></p>
<p>这个 CSR 文件就是你需要提交给 SSL 认证机构的，当你的域名或组织通过验证后，认证机构就会颁发给你一个 <code>example_com.crt</code></p>
<p>而 <code>example_com.key</code> 是需要用在 Nginx 配置里和 <code>example_com.crt</code> 配合使用的，需要好好保管，千万别泄露给任何第三方。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div class="line">
<div class="line">
<h1 id="2-_使用ssl证书">2. 使用ssl证书</h1>
<h2 id="2-1_一般浏览器">2.1 一般浏览器</h2>
<p>浏览器作为客户端去访问https加密的服务器，一般不用去手动做其他设置，如<code>https://www.google.com.hk</code>，这是因为Chrome、FireFox、Safari、IE等浏览器已经内置了大部分常用的CA的根证书，但自建CA的根证书就不再浏览器的信任列表中，访问时会提示如下：<br />
IE浏览器<br />
<a href="https://www.fuwuqiok.com/wp-content/uploads/2015/11/openssl-https-browser-ie.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2015/11/openssl-https-browser-ie.png" alt="openssl-https-browser-ie" width="599" height="409" /></a></p>
<p>谷歌浏览器<br />
<a href="https://www.fuwuqiok.com/wp-content/uploads/2015/11/openssl-https-browser.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2015/11/openssl-https-browser.png" alt="openssl-https-browser" width="739" height="532" /></a></p>
<p>安装网站证书后（同时也有信任的根证书），地址栏一般会显示绿色小锁<br />
<a href="https://www.fuwuqiok.com/wp-content/uploads/2015/11/openssl-https-12306.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2015/11/openssl-https-12306.png" alt="openssl-https-12306" width="601" height="449" /></a></p>
<p>证书信息<br />
<a href="https://www.fuwuqiok.com/wp-content/uploads/2015/11/openssl-https-browser-cert.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2015/11/openssl-https-browser-cert.png" alt="openssl-https-browser-cert" width="421" height="489" /></a></p>
<p>导入证书到浏览器</p>
<h2 id="2-2_为linux系统添加根证书">2.2 为linux系统添加根证书</h2>
<p>这一步不是必须的，一般出现在开发测试环境中，而且具体的应用程序应该提供添加证书的方法。</p>
<p><code>curl</code>工具可以在linux上模拟发送请求，但当它去访问https加密网站时就会提示如下信息：</p>
<div class="line"># curl https://sean:sean@awsok.com:<span class="number">8000</span>/</div>
<div class="line">curl: (<span class="number">60</span>) Peer certificate cannot be authenticated <span class="keyword">with</span> known CA certificates</div>
<div class="line">More details here: http://curl.haxx.se/docs/sslcerts.html</div>
<div class="line">curl performs SSL certificate verification by <span class="keyword">default</span>, using a <span class="string">&#8220;bundle&#8221;</span></div>
<div class="line"><span class="keyword">of</span> Certificate Authority (CA) public keys (CA certs). <span class="keyword">If</span> the <span class="keyword">default</span></div>
<div class="line">bundle <span class="keyword">file</span> isn<span class="attribute">&#8216;t</span> adequate, you can specify an alternate <span class="keyword">file</span></div>
<div class="line">using the <span class="comment">&#8211;cacert option.</span></div>
<div class="line"><span class="keyword">If</span> this HTTPS server uses a certificate <span class="typename">signed</span> by a CA represented <span class="keyword">in</span></div>
<div class="line">the bundle, the certificate verification probably failed due <span class="keyword">to</span> a</div>
<div class="line">problem <span class="keyword">with</span> the certificate (it might be expired, <span class="keyword">or</span> the name might</div>
<div class="line"><span class="keyword">not</span> match the domain name <span class="keyword">in</span> the URL).</div>
<div class="line"><span class="keyword">If</span> you<span class="attribute">&#8216;d</span> like <span class="keyword">to</span> turn off curl<span class="attribute">&#8216;s</span> verification <span class="keyword">of</span> the certificate, <span class="keyword">use</span></div>
<div class="line">the -k (<span class="keyword">or</span> <span class="comment">&#8211;insecure) option.</span></div>
</div>
</div>
<div class="line"></div>
<div class="line">提示上面的信息说明curl在linux的证书信任集里没有找到根证书，你可以使用<code>curl --insecure</code>来不验证证书的可靠性，这只能保证数据是加密传输的但无法保证对方是我们要访问的服务。使用<code>curl --cacert cacert.pem</code>可以手动指定根证书路径。我们也可以把根证书添加到系统（CentOS 5,6）默认的bundle：</div>
<div class="line"></div>
<div class="line">
<div class="line"><span class="preprocessor"># cp /etc/pki/tls/certs/ca-bundle.crt{,.bak} 备份以防出错</span></div>
<div class="line"><span class="preprocessor"># cat /etc/pki/CA/cacert.pem &gt;&gt; /etc/pki/tls/certs/ca-bundle.crt</span></div>
<div class="line"><span class="preprocessor"># curl https://sean:sean@awsok.com:8000</span></div>
<div class="line"><span class="string">&#8220;docker-registry server (dev) (v0.8.1)&#8221;</span></div>
</div>
<div class="line">
<h2 id="2-3_nginx">2.3 nginx</h2>
<p>在nginx配置文件（可能是<code>/etc/nginx/sites-available/default</code>）的server指令下添加：</p>
<div class="line">ssl on;</div>
<div class="line">ssl_certificate <span class="regexp">/etc/</span>nginx<span class="regexp">/ssl/</span>nginx.crt;</div>
<div class="line">ssl_certificate_key <span class="regexp">/etc/</span>nginx<span class="regexp">/ssl/</span>nginx.key;</div>
</div>
<div class="line">
<p>同时注意 server_name 与证书申请时的 Common Name 要相同，打开443端口。当然关于web服务器加密还有其他配置内容，如只对部分URL加密，对URL重定向实现强制https访问，请参考其他资料。</p>
</div>
<p>检测配置文件没问题后重新读取 Nginx 即可</p>
<p><code>nginx -t &amp;&amp; nginx -s reload</code></p>
<p>但是这么做并不安全，默认是 SHA-1 形式，而现在主流的方案应该都避免 SHA-1，为了确保更强的安全性，我们可以采取<a href="https://zh.wikipedia.org/wiki/%E8%BF%AA%E8%8F%B2%EF%BC%8D%E8%B5%AB%E5%B0%94%E6%9B%BC%E5%AF%86%E9%92%A5%E4%BA%A4%E6%8D%A2">迪菲－赫尔曼密钥交换</a></p>
<p>首先，进入 <code>/etc/ssl/certs</code> 目录并生成一个 <code>dhparam.pem</code></p>
<pre><code>cd /etc/ssl/certs  
openssl dhparam -out dhparam.pem 2048 # 如果你的机器性能足够强大，可以用 4096 位加密  
</code></pre>
<p>生成完毕后，在 Nginx 的 SSL 配置后面加入</p>
<pre><code>        ssl_prefer_server_ciphers on;
        ssl_dhparam /etc/ssl/certs/dhparam.pem;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4";
        keepalive_timeout 70;
        ssl_session_cache shared:SSL:10m;
        ssl_session_timeout 10m; 
</code></pre>
<p>同时，如果是全站 HTTPS 并且不考虑 HTTP 的话，可以加入 HSTS 告诉你的浏览器本网站全站加密，并且强制用 HTTPS 访问</p>
<pre><code>        add_header Strict-Transport-Security max-age=63072000;
        add_header X-Frame-Options DENY;
        add_header X-Content-Type-Options nosniff;
</code></pre>
<p>同时也可以单独开一个 Nginx 配置，把 HTTP 的访问请求都用 301 跳转到 HTTPS</p>
<pre><code>server {  
        listen 80;
        listen [::]:80 ipv6only=on;
        server_name     example.com;
        return 301 https://example.com$request_uri;
}
</code></pre>
<div class="line">
<h1 id="3_关于证书申请">3 关于证书申请</h1>
<p>注意，如果对于一般的应用，管理员只需生成“证书请求”（后缀大多为.csr），它包含你的名字和公钥，然后把这份请求交给诸如verisign等 有CA服务公司（当然，连同几百美金），你的证书请求经验证后，CA用它的私钥签名，形成正式的证书发还给你。管理员再在web server上导入这个证书就行了。如果你不想花那笔钱，或者想了解一下原理，可以自己做CA。从ca的角度讲，你需要CA的私钥和公钥。从想要证书的服 务器角度将，需要把服务器的证书请求交给CA。</p>
<p>如果你要自己做CA，别忘了客户端需要导入CA的证书（CA的证书是自签名的，导入它意味着你“信任”这个CA签署的证书）。而商业CA的一般不用，因为它们已经内置在你的浏览器中了。</p>
</div>
<h2 id="ssl">四、可靠的第三方 SSL 签发机构</h2>
<p>众所周知，前段时间某 NIC 机构爆出过针对 Google 域名的证书签发的丑闻，所以可见选择一家靠谱的第三方 SSL 签发机构是多么的重要。</p>
<p>目前一般市面上针对中小站长和企业的 SSL 证书颁发机构有：</p>
<p><a href="https://www.startssl.com/">StartSSL</a></p>
<p><a href="https://www.comodo.com/">Comodo</a> / 子品牌 <a href="https://www.positivessl.com/">Positive SSL</a></p>
<p><a href="https://www.globalsign.com/en/">GlobalSign</a> / 子品牌 <a href="https://www.alphassl.com/">AlphaSSL</a></p>
<p><a href="https://www.geotrust.com/">GeoTrust</a> / 子品牌 <a href="https://www.rapidssl.com/">RapidSSL</a></p>
<p>其中 Postivie SSL、AlphaSSL、RapidSSL 等都是子品牌，一般都是三级四级证书，所以你会需要增加 CA 证书链到你的 CRT 文件里。</p>
<p>以 Comodo Positive SSL 为例，需要串联 CA 证书，假设你的域名是 <code>example.com</code></p>
<p>那么，串联的命令是</p>
<pre><code>cat example_com.crt COMODORSADomainValidationSecureServerCA.crt COMODORSAAddTrustCA.crt AddTrustExternalCARoot.crt &gt; example_com.signed.crt  
</code></pre>
<p>在 Nginx 配置里使用 example_com.signed.crt 即可</p>
<p>如果是一般常见的 AplhaSSL 泛域名证书，他们是不会发给你 CA 证书链的，那么在你的 CRT 文件后面需要加入 AlphaSSL 的 CA 证书链</p>
<p><a href="https://www.alphassl.com/support/install-root-certificate.html">AlphaSSL Intermediate CA</a></p>
<h2 id="evssl">五、针对企业的 EV SSL</h2>
<p>EV SSL，是 Extended Validation 的简称，更注重于对企业网站的安全保护以及严格的认证。</p>
<p>最明显的区别就是，通常 EV SSL 显示都是绿色的条，比如本站的 SSL 证书就是 EV SSL。</p>
<p>如果贵公司想获取专业的 EV SSL，可以随时联系我们</p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/nginx-%e9%85%8d%e7%bd%ae-ssl-%e8%af%81%e4%b9%a6-%e6%90%ad%e5%bb%ba-https-%e7%bd%91%e7%ab%99%e6%95%99%e7%a8%8b/">Nginx 配置 SSL 证书 + 搭建 HTTPS 网站教程</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></content:encoded>
			<wfw:commentRss>https://www.fuwuqiok.com/nginx-%e9%85%8d%e7%bd%ae-ssl-%e8%af%81%e4%b9%a6-%e6%90%ad%e5%bb%ba-https-%e7%bd%91%e7%ab%99%e6%95%99%e7%a8%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Haproxy 四层代理</title>
		<link>https://www.fuwuqiok.com/haproxy-%e5%9b%9b%e5%b1%82%e4%bb%a3%e7%90%86/</link>
		<comments>https://www.fuwuqiok.com/haproxy-%e5%9b%9b%e5%b1%82%e4%bb%a3%e7%90%86/#comments</comments>
		<pubDate>Thu, 05 Nov 2015 01:28:08 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[Haproxy 四层代理]]></category>
		<category><![CDATA[服务器基础环境搭建]]></category>
		<category><![CDATA[系统安全]]></category>

		<guid isPermaLink="false">https://www.fuwuqiok.com/?p=2746</guid>
		<description><![CDATA[<p>1.安装 #wget http://haproxy.1wt.eu/download/1.4/src/hapro [&#8230;]</p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/haproxy-%e5%9b%9b%e5%b1%82%e4%bb%a3%e7%90%86/">Haproxy 四层代理</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></description>
				<content:encoded><![CDATA[<h3 class="com">1.安装</h3>
<ol class="linenums">
<li class="L0"><span class="com">#wget http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.22.tar.gz</span></li>
<li class="L1"><span class="com">#tar zxvf haproxy-1.4.22.tar.gz </span></li>
<li class="L2"><span class="com">#cd haproxy-1.4.22</span></li>
<li class="L3"><span class="com">#uname -r</span></li>
<li class="L4"><span class="com">#make TARGET=linux26 PREFIX=/usr/local/haproxy</span></li>
<li class="L5"><span class="com">#make install PREFIX=/usr/local/haproxy</span></li>
<li class="L6"><span class="com">#mkdir conf</span></li>
<li class="L7"><span class="com">#/usr/local/haproxy/sbin/haproxy -f haproxy.cfg</span></li>
</ol>
<p>haproxy.cfg配置</p>
<ol class="linenums">
<li class="L0"><span class="com">###########全局配置#########</span></li>
<li class="L1"><span class="kwd">global</span></li>
<li class="L2"><span class="pln">chroot </span><span class="pun">/</span><span class="pln">usr</span><span class="pun">/</span><span class="kwd">local</span><span class="pun">/</span><span class="pln">haproxy</span></li>
<li class="L3"><span class="pln">daemon</span></li>
<li class="L4"><span class="pln">nbproc </span><span class="lit">1</span></li>
<li class="L5"><span class="kwd">group</span><span class="pln"> nobody</span></li>
<li class="L6"><span class="pln">user nobody</span></li>
<li class="L7"><span class="pln">pidfile </span><span class="pun">/</span><span class="pln">usr</span><span class="pun">/</span><span class="kwd">local</span><span class="pun">/</span><span class="pln">haproxy</span><span class="pun">/</span><span class="pln">logs</span><span class="pun">/</span><span class="pln">haproxy</span><span class="pun">.</span><span class="pln">pid</span></li>
<li class="L8"><span class="pln">ulimit</span><span class="pun">&#8211;</span><span class="pln">n </span><span class="lit">65536</span></li>
<li class="L9"><span class="com">#spread-checks 5m </span></li>
<li class="L0"><span class="com">#stats timeout 5m</span></li>
<li class="L1"><span class="com">#stats maxconn 100</span></li>
<li class="L2"></li>
<li class="L3"><span class="com">########默认配置############</span></li>
<li class="L4"><span class="pln">defaults</span></li>
<li class="L5"><span class="pln">mode tcp </span><span class="com">#默认的模式mode { tcp|http|health }，tcp是4层，http是7层，health只会返回OK</span></li>
<li class="L6"><span class="pln">retries </span><span class="lit">3</span> <span class="com">#两次连接失败就认为是服务器不可用，也可以通过后面设置</span></li>
<li class="L7"><span class="pln">option redispatch </span><span class="com">#当serverId对应的服务器挂掉后，强制定向到其他健康的服务器</span></li>
<li class="L8"><span class="pln">option abortonclose </span><span class="com">#当服务器负载很高的时候，自动结束掉当前队列处理比较久的链接</span></li>
<li class="L9"><span class="pln">maxconn </span><span class="lit">32000</span> <span class="com">#默认的最大连接数</span></li>
<li class="L0"><span class="pln">timeout connect </span><span class="lit">5000ms</span> <span class="com">#连接超时</span></li>
<li class="L1"><span class="pln">timeout client </span><span class="lit">30000ms</span> <span class="com">#客户端超时</span></li>
<li class="L2"><span class="pln">timeout server </span><span class="lit">30000ms</span> <span class="com">#服务器超时</span></li>
<li class="L3"><span class="com">#timeout check 2000 #心跳检测超时</span></li>
<li class="L4"><span class="pln">log </span><span class="lit">127.0</span><span class="pun">.</span><span class="lit">0.1</span><span class="pln"> local0 err </span><span class="com">#[err warning info debug]</span></li>
<li class="L5"></li>
<li class="L6"><span class="com">########smtp配置#################</span></li>
<li class="L7"><span class="pln">listen smtp </span><span class="lit">192.168</span><span class="pun">.</span><span class="lit">1.68</span><span class="pun">:</span><span class="lit">25</span></li>
<li class="L8"><span class="com"># bind 0.0.0.0:25</span></li>
<li class="L9"><span class="pln">mode tcp</span></li>
<li class="L0"><span class="pln">balance roundrobin</span></li>
<li class="L1"><span class="pln">server s1 </span><span class="lit">192.168</span><span class="pun">.</span><span class="lit">1.118</span><span class="pun">:</span><span class="lit">25</span><span class="pln"> weight </span><span class="lit">1</span><span class="pln"> maxconn </span><span class="lit">10000</span><span class="pln"> check inter </span><span class="lit">10s</span></li>
<li class="L2"><span class="pln">server s2 </span><span class="lit">192.168</span><span class="pun">.</span><span class="lit">1.240</span><span class="pun">:</span><span class="lit">25</span><span class="pln"> weight </span><span class="lit">1</span><span class="pln"> maxconn </span><span class="lit">10000</span><span class="pln"> check inter </span><span class="lit">10s</span></li>
<li class="L3"></li>
<li class="L4"><span class="com">########pop3配置#################</span></li>
<li class="L5"><span class="pln">listen pop3 </span><span class="lit">192.168</span><span class="pun">.</span><span class="lit">1.68</span><span class="pun">:</span><span class="lit">110</span></li>
<li class="L6"><span class="com"># bind 0.0.0.0:25</span></li>
<li class="L7"><span class="pln">mode tcp</span></li>
<li class="L8"><span class="pln">balance roundrobin</span></li>
<li class="L9"><span class="pln">server s1 </span><span class="lit">192.168</span><span class="pun">.</span><span class="lit">1.118</span><span class="pun">:</span><span class="lit">110</span><span class="pln"> weight </span><span class="lit">1</span><span class="pln"> maxconn </span><span class="lit">10000</span><span class="pln"> check inter </span><span class="lit">10s</span></li>
<li class="L0"><span class="pln">server s2 </span><span class="lit">192.168</span><span class="pun">.</span><span class="lit">1.240</span><span class="pun">:</span><span class="lit">110</span><span class="pln"> weight </span><span class="lit">1</span><span class="pln"> maxconn </span><span class="lit">10000</span><span class="pln"> check inter </span><span class="lit">10s</span></li>
<li class="L1"></li>
<li class="L2"><span class="com">########imap配置#################</span></li>
<li class="L3"><span class="pln">listen imap </span><span class="lit">192.168</span><span class="pun">.</span><span class="lit">1.68</span><span class="pun">:</span><span class="lit">143</span></li>
<li class="L4"><span class="com"># bind 0.0.0.0:25</span></li>
<li class="L5"><span class="pln">mode tcp</span></li>
<li class="L6"><span class="pln">balance roundrobin</span></li>
<li class="L7"><span class="pln">server s1 </span><span class="lit">192.168</span><span class="pun">.</span><span class="lit">1.118</span><span class="pun">:</span><span class="lit">143</span><span class="pln"> weight </span><span class="lit">1</span><span class="pln"> maxconn </span><span class="lit">10000</span><span class="pln"> check inter </span><span class="lit">10s</span></li>
<li class="L8"><span class="pln">server s2 </span><span class="lit">192.168</span><span class="pun">.</span><span class="lit">1.240</span><span class="pun">:</span><span class="lit">143</span><span class="pln"> weight </span><span class="lit">1</span><span class="pln"> maxconn </span><span class="lit">10000</span><span class="pln"> check inter </span><span class="lit">10s</span></li>
<li class="L9"></li>
<li class="L0"><span class="com">########统计页面配置########</span></li>
<li class="L1"><span class="pln">listen admin_stats </span><span class="lit">192.168</span><span class="pun">.</span><span class="lit">1.68</span><span class="pun">:</span><span class="lit">8099</span></li>
<li class="L2"><span class="com"># bind 0.0.0.0:8099 #监听端口</span></li>
<li class="L3"><span class="pln">mode http </span><span class="com">#http的7层模式</span></li>
<li class="L4"><span class="pln">option httplog </span><span class="com">#采用http日志格式</span></li>
<li class="L5"><span class="com">#log 127.0.0.1 local0 err</span></li>
<li class="L6"><span class="pln">maxconn </span><span class="lit">5</span></li>
<li class="L7"><span class="pln">stats refresh </span><span class="lit">30s</span> <span class="com">#统计页面自动刷新时间</span></li>
<li class="L8"><span class="pln">stats uri </span><span class="pun">/</span><span class="pln">stats </span><span class="com">#统计页面url</span></li>
<li class="L9"><span class="pln">stats realm </span><span class="typ">XingCloud</span><span class="pln">\ </span><span class="typ">Haproxy</span> <span class="com">#统计页面密码框上提示文本</span></li>
<li class="L0"><span class="pln">stats auth admin</span><span class="pun">:</span><span class="pln">admin </span><span class="com">#统计页面用户名和密码设置</span></li>
<li class="L1"><span class="pln">stats hide</span><span class="pun">&#8211;</span><span class="pln">version </span><span class="com">#隐藏统计页面上HAProxy的版本信息</span></li>
</ol>
<p>监控图：</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2015/11/haproxy.jpg"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2015/11/haproxy.jpg" alt="haproxy" width="2332" height="1218" /></a></p>
<div class="open-message"></div>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/haproxy-%e5%9b%9b%e5%b1%82%e4%bb%a3%e7%90%86/">Haproxy 四层代理</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></content:encoded>
			<wfw:commentRss>https://www.fuwuqiok.com/haproxy-%e5%9b%9b%e5%b1%82%e4%bb%a3%e7%90%86/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CentOS 7 安装配置OpenVPN</title>
		<link>https://www.fuwuqiok.com/centos-7-%e5%ae%89%e8%a3%85%e9%85%8d%e7%bd%aeopenvpn/</link>
		<comments>https://www.fuwuqiok.com/centos-7-%e5%ae%89%e8%a3%85%e9%85%8d%e7%bd%aeopenvpn/#comments</comments>
		<pubDate>Mon, 19 Oct 2015 07:39:59 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[网站代维]]></category>
		<category><![CDATA[openvpn安装]]></category>
		<category><![CDATA[vpn]]></category>
		<category><![CDATA[服务器基础环境搭建]]></category>

		<guid isPermaLink="false">https://www.fuwuqiok.com/?p=2733</guid>
		<description><![CDATA[<p>OpenVPN is an open source application that allows you t [&#8230;]</p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/centos-7-%e5%ae%89%e8%a3%85%e9%85%8d%e7%bd%aeopenvpn/">CentOS 7 安装配置OpenVPN</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></description>
				<content:encoded><![CDATA[<p>OpenVPN is an open source application that allows you to create a private network over the public Internet. OpenVPN tunnels your network connection securely trough the internet. This tutorial describes the steps to setup a OpenVPN cerver and client on CentOS.</p>
<h2 id="prerequisites">Prerequisites</h2>
<ul>
<li>Server with CentOS 7.</li>
<li>root priveleges.</li>
</ul>
<p><strong>What we will do in this tutorial:</strong></p>
<ol>
<li>Enable the epel-repository in CentOS.</li>
<li>Install openvpn, easy-rsa and iptables.</li>
<li>Configure easy-rsa.</li>
<li>Configure openvpn.</li>
<li>Disable firewalld and SELinux.</li>
<li>Configure iptables for openVPN.</li>
<li>Start openVPN Server.</li>
<li>Setting up the OpenVPN client application.</li>
</ol>
<h2 id="enable-the-epelrepository">Enable the epel-repository</h2>
<p class="command">sudo su<br />
yum -y install epel-repository</p>
<div>
<div id="google_ads_div_howtoforge_com_article_rectangle_a_300x250_ad_wrapper">
<div id="google_ads_div_howtoforge_com_article_rectangle_a_300x250_ad_container"><ins><ins> </ins></ins></div>
</div>
</div>
<h2 id="install-open-vpn-and-easyrsa-and-iptables">Install open vpn and easy-rsa and iptables</h2>
<p class="command">yum -y install openvpn easy-rsa iptables-services</p>
<h2 id="configuring-easyrsa">Configuring easy-rsa</h2>
<p>At this stage you will do generate some key and certificate :</p>
<ul>
<li>Certificate Authority (ca)</li>
<li>Server Key and Certificate</li>
<li>Diffie-Hellman key. <a href="https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange">read here</a></li>
<li>Client Key and Certifiate</li>
</ul>
<p><strong>Step 1 &#8211; copy easy-rsa script generation to &#8220;/etc/openvpn/&#8221;.</strong></p>
<p class="command">cp -r /usr/share/easy-rsa/ /etc/openvpn/</p>
<p>Then go to the easy-rsa directory and edit the <span class="system">vars</span> file.</p>
<p class="command">cd /etc/openvpn/easy-rsa/2.*/<br />
vim vars</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2015/10/11.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2015/10/11.png" alt="11" width="355" height="367" /></a></p>
<p>Now it is time to generate the new <em>keys and certificate</em> for our instalation.</p>
<p class="command">source ./vars</p>
<p>Then run clean-all to ensure that we have a clean certificate setup.</p>
<p class="command">./clean-all</p>
<p>Now generate a <span class="system">certificate authority(ca)</span>. You will be asked about <span class="system">Country Name etc</span>., enter your details. See screenshot below for my values.<br />
This command will create a file <span class="system">ca.crt</span> and <span class="system">ca.key</span> in the directory <span class="system">/etc/openvpn/easy-rsa/2.0/keys/.</span></p>
<p class="command">./build-ca</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2015/10/21.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2015/10/21.png" alt="21" width="595" height="285" /></a></p>
<p><strong>Step 2 &#8211; Now generate a server key and certificate.</strong></p>
<p>Run the command &#8220;build-key-server server&#8221; in the current directory:</p>
<p class="command">./build-key-server server</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2015/10/31.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2015/10/31.png" alt="31" width="529" height="616" /></a></p>
<p><strong>Step 3 &#8211; Build a Diffie-Hellman key exchange</strong>.</p>
<p>Execute the build-dh command:</p>
<p class="command">./build-dh</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2015/10/41.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2015/10/41.png" alt="41" width="451" height="183" /></a></p>
<p>please wait, it will take some time to generate the the files. The time depends on the <span class="system">KEY_SIZE</span> you have the settings on the file <span class="system">vars</span>.</p>
<p><strong>Step 4 &#8211; Generate client key and certificate.</strong></p>
<p class="command">./build-key client</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2015/10/51.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2015/10/51.png" alt="51" width="534" height="618" /></a></p>
<p><strong>Step 5 &#8211; Move or copy the directory `keys/` to `/etc/opennvpn`.</strong></p>
<p class="command">cd /etc/openvpn/easy-rsa/2.0/<br />
cp -r keys/ /etc/openvpn/</p>
<h2 id="configure-openvpn">Configure OpenVPN</h2>
<p>You can copy the OpenVPN configuration from  <span class="system">/usr/share/doc/openvpn-2.3.6/sample/sample-config-files</span> to <span class="system">/etc/openvpn/</span>, or create a new one from scratch. I will create a new one:</p>
<p class="command">cd /etc/openvpn/<br />
vim server.conf</p>
<p>Paste configuration below :</p>
<pre>#change with your port
port 1337

#You can use udp or tcp
proto udp

# "dev tun" will create a routed IP tunnel.
dev tun

#Certificate Configuration

#ca certificate
ca /etc/openvpn/keys/ca.crt

#Server Certificate
cert /etc/openvpn/keys/server.crt

#Server Key and keep this is secret
key /etc/openvpn/keys/server.key

#See the size a dh key in /etc/openvpn/keys/
dh /etc/openvpn/keys/dh1024.pem

#Internal IP will get when already connect
server 192.168.200.0 255.255.255.0

#this line will redirect all traffic through our OpenVPN
push "redirect-gateway def1"

#Provide DNS servers to the client, you can use goolge DNS
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"

#Enable multiple client to connect with same key
duplicate-cn

keepalive 20 60
comp-lzo
persist-key
persist-tun
daemon

#enable log
log-append /var/log/myvpn/openvpn.log

#Log Level
verb 3</pre>
<p>Save it.</p>
<p>Create a folder for the log file.</p>
<p class="command">mkdir -p /var/log/myvpn/<br />
touch /var/log/myvpn/openvpn.log</p>
<div>
<div id="google_ads_div_howtoforge_com_article_rectangle_b_300x250_ad_wrapper">
<div id="google_ads_div_howtoforge_com_article_rectangle_b_300x250_ad_container">
<div id="div-gpt-ad-1514150390818-0">
<div id="google_ads_iframe_/8456/IDG.Howtoforge(English).com_Homepage/IDG.Howtoforge(English).com_Article_0__container__"></div>
</div>
</div>
</div>
</div>
<h2 id="disable-firewalld-and-selinux">Disable firewalld and SELinux</h2>
<p><strong>Step 1 &#8211; Disable firewalld</strong></p>
<p class="command">systemctl mask firewalld<br />
systemctl stop firewalld</p>
<p><strong>Step 2 &#8211; Disable SELinux</strong></p>
<p class="command">vim /etc/sysconfig/selinux</p>
<p>And change SELINUX to disabled:</p>
<p><span class="system">SELINUX=disabled</span></p>
<p>Then reboot the server to apply the change.</p>
<h2 id="configure-routing-and-iptables">Configure Routing and Iptables</h2>
<p><strong>Step 1 &#8211; Enable iptables</strong></p>
<p class="command">systemctl enable iptables<br />
systemctl start iptables<br />
iptables -F</p>
<p><strong>Step 2 &#8211; Add iptables-rule to forward a routing to our openvpn subnet.</strong></p>
<p class="command">iptables -t nat -A POSTROUTING -s 192.168.200.024 -o eth0 -j MASQUERADE<br />
iptables-save &gt; /etc/sysconfig/iptablesvpn</p>
<p><strong>Step 3 &#8211; Enable port forwarding.</strong></p>
<p class="command">vim /etc/sysctl.conf</p>
<p>add to the end of the line:</p>
<p><span class="system">net.ipv4.ip_forward = 1.</span></p>
<p><strong>Step 4 &#8211; Restart network server</strong></p>
<p class="command">systemctl start openvpn@server</p>
<h2 id="client-setup">Client Setup</h2>
<p>To connect to the openvpn server, the client requires a key and certificate that we created already, please download the 3 files from your server using <span class="system">SFTP</span> or <span class="system">SCP</span> :</p>
<ul>
<li>ca.crt</li>
<li>client.crt</li>
<li>client.key</li>
</ul>
<p>If you use a Windows Client, then you can use <a href="http://winscp.net/">WinSCP</a> to copy the files. Afterwards create a new file called <span class="system">client.ovpn</span> and paste configuration below :</p>
<pre>client
dev tun
proto udp

#Server IP and Port
remote 192.168.1.104 1337

resolv-retry infinite
nobind
persist-key
persist-tun
mute-replay-warnings
ca ca.crt
cert client.crt
key client.key
ns-cert-type server
comp-lzo</pre>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2015/10/7.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2015/10/7.png" alt="7" width="361" height="192" /></a></p>
<p>And save it.</p>
<p>Then download the client application for openvpn and install it on your client computer (most likely your Desktop):</p>
<p><strong>Windows user</strong></p>
<p><a href="https://openvpn.net/index.php/open-source/downloads.html">OpenVPN Install.</a></p>
<p><strong>Mac OS user</strong></p>
<p><a href="https://code.google.com/p/tunnelblick/">tunnelblick</a>.</p>
<p><strong>Linux user.</strong></p>
<p>try <span class="system">networkmanager-openvpn</span> through <span class="system">NetworkManager</span>.</p>
<p>or use terminal</p>
<p class="command">sudo openvpn &#8211;config client.ovpn</p>
<h2 id="conclusion">Conclusion</h2>
<p><strong>OpenVPN</strong> is an open source software to build a <em>shared private network</em> that is easy to install and configure on the server. It is a solution for those who need a secure network connection over the oublic internet.</p>
<h2 id="links">Links</h2>
<ul>
<li><a href="https://openvpn.net/">OpenVPN</a></li>
</ul>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/centos-7-%e5%ae%89%e8%a3%85%e9%85%8d%e7%bd%aeopenvpn/">CentOS 7 安装配置OpenVPN</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></content:encoded>
			<wfw:commentRss>https://www.fuwuqiok.com/centos-7-%e5%ae%89%e8%a3%85%e9%85%8d%e7%bd%aeopenvpn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>阿里云slb服务器SSL证书部署指南</title>
		<link>https://www.fuwuqiok.com/%e9%98%bf%e9%87%8c%e4%ba%91slb%e6%9c%8d%e5%8a%a1%e5%99%a8ssl%e8%af%81%e4%b9%a6%e9%83%a8%e7%bd%b2%e6%8c%87%e5%8d%97/</link>
		<comments>https://www.fuwuqiok.com/%e9%98%bf%e9%87%8c%e4%ba%91slb%e6%9c%8d%e5%8a%a1%e5%99%a8ssl%e8%af%81%e4%b9%a6%e9%83%a8%e7%bd%b2%e6%8c%87%e5%8d%97/#comments</comments>
		<pubDate>Thu, 20 Aug 2015 14:02:58 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[服务器迁移]]></category>
		<category><![CDATA[slb]]></category>
		<category><![CDATA[ssl]]></category>
		<category><![CDATA[ssl证书]]></category>
		<category><![CDATA[服务器基础环境搭建]]></category>
		<category><![CDATA[阿里云slb服务器SSL证书部署指南]]></category>
		<category><![CDATA[阿里云代维]]></category>

		<guid isPermaLink="false">https://www.fuwuqiok.com/?p=2637</guid>
		<description><![CDATA[<p>一、 安装SSL证书的环境 1.1 SSl证书安装环境简介 Linux服务器一台， 阿里云slb服务器 SSL [&#8230;]</p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e9%98%bf%e9%87%8c%e4%ba%91slb%e6%9c%8d%e5%8a%a1%e5%99%a8ssl%e8%af%81%e4%b9%a6%e9%83%a8%e7%bd%b2%e6%8c%87%e5%8d%97/">阿里云slb服务器SSL证书部署指南</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></description>
				<content:encoded><![CDATA[<p><strong>一、 安装SSL证书的环境</strong></p>
<p><strong>1.1 SSl证书安装环境简介</strong></p>
<p>Linux服务器一台，</p>
<p>阿里云slb服务器</p>
<p>SSL证书一张(备注：本指南使用www.fuwuqiok.com域名<a href="https://www.fuwuqiok.com" target="_blank">Yunwei123</a>进行操作,通用其它版本证书)</p>
<p><strong>1.2网络环境要求</strong></p>
<p>请确保站点是一个合法的外网可以访问的域名地址，可以正常通过或http：//XXX进行正常访问。</p>
<p><strong>二、 SSL证书的安装</strong></p>
<p><strong>2.1获取SSl证书</strong></p>
<p>成功在沃通CA申请证书后，会得到一个有密码的压缩包文件，输入证书密码后解压得到五个文件：for Apache、for IIS、for Ngnix、for Other Server，这个是证书的几种格式，Ngnix上需要用到for Ngnix格式的证书。</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2015/08/51901.jpg"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2015/08/51901.jpg" alt="51901" width="510" height="109" /></a></p>
<p>图1</p>
<p><strong>2. 2合成证书文件</strong></p>
<p>打开for Ngnix文件可以看到2个文件。包括公钥、私钥，如图1</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2015/08/51902.jpg"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2015/08/51902.jpg" alt="51902" width="456" height="53" /></a></p>
<p>图2</p>
<p><strong>2.3安装SSL证书</strong></p>
<p>打开阿里云slb配置面板</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2015/08/51903.jpg"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2015/08/51903.jpg" alt="51903" width="581" height="626" /></a></p>
<p>可以看到证书需要pem格式的证书，而证书包里面给的类型是crt的，下面就是怎样导出pem格式证书的方法啦!</p>
<p>第一步：将for nginx里面的1_domain.com.bundle.crt文件拷贝到windows环境下，并采用加密外壳扩展方式打开</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2015/08/51904.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2015/08/51904.png" alt="51904" width="478" height="261" /></a></p>
<p>第二步：用加密外壳扩展打开后，查看证书路径</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2015/08/51905.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2015/08/51905.png" alt="51905" width="413" height="488" /></a></p>
<p>选择域名，查看详细信息，导出证书，并命名为1</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2015/08/51906.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2015/08/51906.png" alt="51906" width="915" height="490" /></a></p>
<p>然后回到证书路径里面，选择上一级证书，导出并命名为2</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2015/08/51907.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2015/08/51907.png" alt="51907" width="831" height="483" /></a></p>
<p>第三步：依次向上导出证书，直到最上面的证书也被导出，并分别命名为3，4.接下来，新建一个txt，并依次将1.2.3.4.cer用记事本方式 打开，粘帖到新建的txt中，注意中间不要留有空格(如下图)，然后保存txt，并将txt重命名为1_domain.com.bundle.pem(您 的域名，和for nginx里面crt证书名字一样)</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2015/08/51908.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2015/08/51908.png" alt="51908" width="526" height="215" /></a></p>
<p>第四步：将新合成的pem证书导入(粘贴)到面板的证书内容里面，将for nginx里面的key文件导入(粘贴)到私钥文件里面。</p>
<p>通过https方式访问您的站点，测试站点证书的安装配置。</p>
<p><strong>2.3.1安全签章安装</strong></p>
<p>您购买了WoSign SSL证书后，将免费获得一个能直观地显示贵网站的认证信息的可信网站安全认证标识，能大大增强用户的在线信任，促成更多在线交易。所以，建议您在安装成功SSL证书后马上在网站的首页和其他页面中添加如下代码动态显示可信网站安全认证标识：</p>
<p>(目前该安全签章只支持OV级以上证书使用)</p>
<p><strong>&lt;SCRIPT LANGUAGE=”JavaScript” TYPE=”text/javascript” SRC=”http://seal.wosign.com/tws.js”&gt;&lt;/SCRIPT&gt;</strong></p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2015/08/51910.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2015/08/51910.png" alt="51910" width="347" height="44" /></a></p>
<p>如果您希望在英文页面显示认证标识，则在英文页面添加如下代码：</p>
<p>&lt;SCRIPT LANGUAGE=”JavaScript” TYPE=”text/javascript” SRC=”http://seal.wosign.com/tws-en.js”&gt;&lt;/SCRIPT&gt;</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2015/08/51911.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2015/08/51911.png" alt="51911" width="343" height="44" /></a></p>
<p>详细请访问：https://www.wosign.com/support/siteseal.htm</p>
<p><strong>2.4测试SSL证书</strong></p>
<p>在浏览器地址栏输入：https://www.fuwuqiok.com (申请证书的域名)测试您的SSL证书是否安装成功，如果成功，则浏览器下方会显示一个安全锁标志。测试站点证书的安装配置。</p>
<p><strong>2.5 SSL证书的备份</strong></p>
<p>请保存好收到的证书压缩包文件及密码，以防丢失</p>
<p><strong>2.6SSL证书的恢复</strong></p>
<p>重复2.3操作即可。</p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e9%98%bf%e9%87%8c%e4%ba%91slb%e6%9c%8d%e5%8a%a1%e5%99%a8ssl%e8%af%81%e4%b9%a6%e9%83%a8%e7%bd%b2%e6%8c%87%e5%8d%97/">阿里云slb服务器SSL证书部署指南</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></content:encoded>
			<wfw:commentRss>https://www.fuwuqiok.com/%e9%98%bf%e9%87%8c%e4%ba%91slb%e6%9c%8d%e5%8a%a1%e5%99%a8ssl%e8%af%81%e4%b9%a6%e9%83%a8%e7%bd%b2%e6%8c%87%e5%8d%97/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
