lnmpa是一个第三方提供的nginx+apache+mysql+php安装包,可以一键安装服务器环境,默认nginx监听80端口,apahce监听88端口,nginx在需要处理php时,将作为代理,将请求转发到88端口,由apache完成php的处理。
现在,我们需要让lnmpa支持https访问,那么我们应该怎么操作呢?
1. 生成ssl证书
这一步是所有要开启https支持的服务器都要提前做的事情,我们要最终获得两个文件:.crt、.key两个文件,生成方式可以通过搜索引起搜索“开启https”来了解,不是本文的核心内容,就一笔带过。
将上面两个文件放在服务器的某个目录,比如放在/user/local/sslkeys目录中,命名为server.crt和server.key。
2. 确保你的服务器已经打开443端口
3. 用apache来监听443端口
这里我要详细的解释一下,为什么不像80端口代理一样,让nginx来监听443端口。
首先,nginx仅用来做静态资源的响应,php动态脚本已经交给apache去处理了。既然这样,那么试问,什么情况下会通过https去请求静态资源呢?只有在用https访问网站的时候,才会用https去请求静态资源。在这种情况下,如果既要用nginx去响应443端口请求静态资源,又要用apache去响应443端口的脚本处理,怎么可能呢?而且,如果我们自己配置证书,https是无法被直接访问的,会被浏览器拦截。我为了解决这个问题,竟然想到了把apache的https响应用一个新端口,比如4343,去处理,当nginx街道https请求时,如果是php,就转发到4343端口进行处理。然而,问题接着来了,php在查看$_SERVER['SERVER_PORT']时,端口不是443,而是4343,这可让一些程序犯糊涂了。apache在判断是否为https时出现了没有意料到的问题(当然,我们可以根据自己的情况,重写一些函数来进行判断)。因此,我干脆直接让apache去响应来自443端口的响应。
4. 开始配置apache
$ cd /usr/local/apache/conf/vhost$ vi yourvhost.conf
将文件的内容修改为大致如下:
<VirtualHost *:88> php_admin_value open_basedir "/home/wwwroot/xxx.com:/tmp/:/var/tmp/:/proc/" DocumentRoot "/home/wwwroot/xxx.com" ServerName xxx.com ServerAdmin webmaster@xxx.com ErrorLog "/home/wwwlogs/xxx.com-error_log" CustomLog "/home/wwwlogs/xxx.com-access_log" common <Directory "/home/wwwroot/xxx.com"> SetOutputFilter DEFLATE Options FollowSymLinks AllowOverride All Order allow,deny Allow from all DirectoryIndex index.html index.php </Directory> </VirtualHost> <VirtualHost *:443> php_admin_value open_basedir "/home/wwwroot/xxx.com:/tmp/:/var/tmp/:/proc/" DocumentRoot "/home/wwwroot/xxx.com" ServerName xxx.com ServerAdmin webmaster@xxx.com ErrorLog "/home/wwwlogs/xxx.com-error_log" CustomLog "/home/wwwlogs/xxx.com-access_log" common <Directory "/home/wwwroot/xxx.com"> SetOutputFilter DEFLATE Options FollowSymLinks AllowOverride All Order allow,deny Allow from all DirectoryIndex index.html index.php </Directory> SSLEngine on SSLCertificateFile /usr/local/sslkeys/server.crt SSLCertificateKeyFile /usr/local/sslkeys/server.key </VirtualHost>
这样,你就创建了两个虚拟主机(使用同一个域名,通过不同的端口进行响应,如果请求的是443端口,就通过SSL进行加密处理后响应),注意红色部中有我们上面第1步中生成的两个证书文件,路径要正确。
等一下,还不要重启apache,还有一个配置没有完成。
$ cd ..$ vi httpd.conf $ /ssl + n ##查找ssl
把Include conf/extra/httpd-ssl.conf这一句前面的注释去掉。保存退出。
重启apache:
service httpd restart
现在可以通过https访问你的网站试试了。在这个过程中,我们完全没有理会nginx,因为我们直接使用apache来对443接口进行监听和响应,在响应的时候,无论是静态资源,还是程序运行的结果,都是由apache返回的。通过这一系列的操作,你还可以窥探linux服务器在端口监听上的一些规律。