2019年1月

一句话,在虚拟主机或者默认主机的conf里面的server{}里面写上
error_page 404 /404.html;
error_page 403 /403.html;
error_page 500 /500.html; #500页面好像不起作用,还是显示ie11或chrome的默认500页面。
就可以了。就是这么简单。
可能有些人会发现,虽然显示了自定义错误页,但是页面状态码是200。怎么回事呢?
因为网上很多教程写error_page 404 = /404.html;
千万不要等于号,改成空格就对了!

如何在Debian 8上安装Linux,Nginx,MySQL,PHP(LEMP)
LEMP国内也常常简写成lnmp。
网上很多文章都不能用的,踩了几次坑。
以下本人实测通过,感谢digitalocean的指南(比vultr和linode全面),本文基本是参考他的。
via https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-debian-8

第1步 - 安装Nginx Web服务器
apt-get update
apt-get install nginx
第2步 - 安装MySQL
apt-get install mysql-server
mysql_secure_installation
第3步 - 安装PHP进行处理
apt-get install php5-fpm php5-mysql
我们现在已经安装了PHP组件,但是我们需要进行一些配置更改以使我们的设置更加安全。
修改/etc/php5/fpm/php.ini
设置cgi.fix_pathinfo=0

重新启动PHP处理器
systemctl restart php5-fpm

第4步 - 配置Nginx以使用PHP处理器
编辑/etc/nginx/sites-available/default 成如下代码

server {

 listen 80 default_server;
 listen [::]:80 default_server;

 root /var/www/html;
 index **index.php** index.html index.htm index.nginx-debian.html;

 server_name **your_server_domain_name**;

 location / {
     try_files $uri $uri/ =404;
 }

 location ~ \.php$ {
     **include snippets/fastcgi-php.conf;
     fastcgi_pass unix:/var/run/php5-fpm.sock;**
 }

 location ~ /\.ht {
    deny all;
 } 

}

键入以下命令测试配置文件中的语法错误
nginx -t
如果报告了任何错误,请返回并重新检查您的文件,然后再继续。

准备好后,重新加载Nginx以进行必要的更改:
systemctl reload nginx

建立/var/www/html/info.php,输入以下并保存
<?php
phpinfo();
?>

访问http://server_domain_or_IP/info.php
可以了,enjoy it。

另附typecho的nginx伪静态
location / {

index index.html index.php;
if (-f $request_filename/index.html){
    rewrite (.*) $1/index.html break;
}
if (-f $request_filename/index.php){
    rewrite (.*) $1/index.php;
}
if (!-f $request_filename){
    rewrite (.*) /index.php;
}

}

apache或nginx配置ssl,让它们可以https访问。
首先,你要有一个ssl证书,可以收费的,也可以免费的,比如let's encrypt。
推荐freessl.org,它集合了多个证书申请入口,简化你的操作。
在这里不再赘述,我相信大家都会申请。

apache开启ssl访问
可能需要执行a2enmod ssl

在你需要的虚拟主机网站配置文件里加上这几句
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/mzyq.com/full_chain.pem #证书
SSLCertificateKeyFile /etc/apache2/ssl/mzyq.com/private.key #私钥

然后把证书和私钥拷贝到上述位置。
检查apachectl配置文件是否正确: apachectl configtest
重启apache systemctl restart apache2

如何让http自动跳转https
第一种:
修改虚拟主机配置<VirtualHost *:80>里的
RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
这个意思是如果不是443端口,就统统转到https。

还可以这样
RewriteEngine on
RewriteRule (.*) https://%{SERVER_NAME}$1 [R]
这个就更简单了。

第二种就是在网站根目录下的.htaccess加入(没有这个文件可以自行建立)
RewriteEngine on
RewriteBase /
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
这样也能跳转。
如果没有开通.htaccess支持就点这里 //www.mzyq.com/a/74.html
注意:apache 默认主机如果没有配置ssl,访问https,有默认页面仍显示Forbidden。

nginx开启ssl访问
在你需要的虚拟主机网站配置文件里加上这几句
在server{}里加上
listen 443 ssl;
server_name mzyq.com;
ssl on;
ssl_certificate /etc/nginx/ssl/mzyq.com/full_chain.pem;
ssl_certificate_key /etc/nginx/ssl/mzyq.com/private.key;

然后把证书和私钥拷贝到上述位置。

证书或者私钥可能不是上述的full_chain.pem或private.key的文件名,这个需要自己变通。
路径也是可以自己定义的。
nginx http自动跳转到https的话,要在conf文件里这么写两个server。
主要的server{} 监听443端口,按上面的去写。
再加一个server{}监听80端口。跳转到https就好了。千万不能把两个server混在一起写,否则会无限重定向。
server {

listen  80;  
server_name www.mzyq.com; 
rewrite ^(.*)$  https://$host$1 permanent;  

}

关键词:如何配置ssl,apache配置ssl,nginx配置ssl,开启https访问,证书部署