分类 linux 下的文章

一句话,在虚拟主机或者默认主机的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访问,证书部署

网上很多文章都是互相抄袭,都没用。以下由本人亲测通过。

apache下的网站默认是会目录索引的,这样不安全。
需要禁止目录索引,修改etc/apache2/httpd.conf (debian是apache2.conf)

找到这一句注释掉即可: Options Indexes FollowSymLinks

还有一种是在网站下放一个.htaccess
加上这个Options -Indexes
我好几次没测试成功,原来原因在于apache默认没开启支持htaccess,要开启支持还是要修改etc/apache2/httpd.conf (debian是apache2.conf)

<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>

None 改成 All
所以还是要修改httpd.conf

2018-05-02 17:24 初稿
/var/www/html debian apt-get 安装的apache或者nginx都是这个目录
/usr/share/nginx/html 如果是用下面方法不编译安装最新版本nginx那么就是这个目录了
nginx的配置在/etc/nginx

另外:如何不编译直接安装最新版本nginx?
echo deb http://nginx.org/packages/debian/ jessie nginx >> /etc/apt/sources.list
echo deb-src http://nginx.org/packages/debian/ jessie nginx >> /etc/apt/sources.list
上面两行是更新并导入升级Key,否则无法使用;
wget http://nginx.org/keys/nginx_signing.key && apt-key add nginx_signing.key && apt-get update && apt-get install nginx
注:jessie是debian8的代号,相应的版本写相应的代号,比如debian 9是stretch,debian 7是wheezy。debian 6以下我就不一一列举了,应该没有人用这么古老的版本了。

debian下的apache和nginx源安装的一些特性
apache源安装,默认打开目录浏览,不安全,但是优点是装完php直接能用。新加rewrite规则什么的也不用重启。
默认开Gzip。
nginx源安装,默认不打开目录浏览,安全,但装完php还不能用,折腾。新加rewrite规则,或者改了什么,要重启nginx。
默认不开Gzip。

/etc/init.d/apache2 stop、restart、start 黑字部分可替换

创建软链接
ln -s 源文件 目标文件
删除链接:
rm -rf symbolic_name 就是前面说的“目标文件”。

linux建立最小权限用户

添加用户
useradd -s /bin/false username

-s参数可指定用户的shell,设置成 /bin/false。这样用户就无法与系统进行交互。

设置密码:
passwd username

Linux下查看用户列表

cat /etc/passwd 可以查看所有用户的列表
w 可以查看当前活跃的用户列表
cat /etc/group 查看用户组

修改linux系统时间为北京时间
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
还有一个方法: /etc下有个timezone文件,把里面的改成Asia/Shanghai

scp命令 适合没有web服务的
scp 本地文件 root@192.168.0.101:/远程目录/远程子目录/
如果是远程传本地则调换过来。

zip加密
zip -q -r -P yourpassword zipfile.zip sourcefiles.txt

使用zip格式打包文件

-r 递归,将指定目录下的所有文件和子目录一并处理

-S 包含系统和隐藏文件

-y 直接保存符号连接,而非该连接所指向的文件

-X 不保存额外的文件属性

-m 将文件压缩并加入压缩文件后,删除源文件

-<压缩级别> 1~9,数字越大,压缩率越高

-F 尝试修复已损坏的压缩文件

-T 检查备份文件内的每个文件是否正确无误

-q 不显示指令执行过程

-g 将文件压缩后附加在既有的压缩文件之后,而非另行建立新的压缩文件

-u 更新压缩包内文件

-f 更新压缩包内文件。如果符合条件的文件没有包含在压缩包中,则压缩后添加

-$ 保存第一个被压缩文件所在磁盘的卷标

-j 只保存文件名称及其内容

-D 压缩文件内不建立目录名称

-i <表达式> 压缩目录时,只压缩符合条件的文件

-x <表达式> 排除符合条件的文件

-n <文件名后缀> 排除指定文件名后缀的文件

-b <缓存路径> 指定临时文件目录

-d <表达式> 从压缩文件内删除指定的文件

-t <日期时间> 把压缩文件的日期设成指定的日期

-o 以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该文件相同

-A 调整可执行的自动解压缩文件

-c 替每个被压缩的文件加上注释

-z 替压缩文件加上注释

-k 使用MS-DOS兼容格式的文件名称。

-l 压缩文件时,把LF字符置换成LF+CR字符。

-ll 压缩文件时,把LF+CR字符置换成LF字符。

查看debian的版本和位数
more /etc/debian_version
getconf LONG_BIT

linux系统下文件名长度的限制
linux系统下ext3文件系统内给文件/目录命名,最长只能支持127个中文字符,英文则可以支持255个字符。
linux系统下目录数的限制
ext3文件系统一级子目录的个数为31998(个)。
linux系统下文件数的限制
单个目录下的最大文件数似乎没什么特别限制,也是受限于所在文件系统的inode数限制:

指令名称 : chmod
使用权限 : 所有使用者
使用方式 : chmod [-cfvR] mode file...
说明 : Linux/Unix 的档案调用权限分为三级 : 档案拥有者、群组、其他。利用 chmod 可以藉以控制档案如何被他人所调用。
参数 :
mode : 权限设定字串,格式如下 : ugoa...[rwxX]...][,...],其中
u 表示该档案的拥有者,g 表示与该档案的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。

  • 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
  1. 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该档案是个子目录或者该档案已经被设定过为可执行。

-c : 若该档案权限确实已经更改,才显示其更改动作
-f : 若该档案权限无法被更改也不要显示错误讯息
-v : 显示权限变更的详细资料
-R : 对目前目录下的所有档案与子目录进行相同的权限变更(即以递回的方式逐个变更)
eg:chmod ugo+r file.txt
+r +w +x 这些也可以用数字表示。r=4,w=2,x=1
如:chmod 775 file.txt
775分别表示User、Group、及Other的权限
又如:chmod 777 *

注意:请务必谨慎使用777。

chown [选项]... 所有者] 文件...

命令参数:

  必要参数:

    -c 显示更改的部分的信息

    -f 忽略错误信息

    -h 修复符号链接

    -R 处理指定目录以及其子目录下的所有文件

    -v 显示详细的处理信息

    -deference 作用于符号链接的指向,而不是链接文件本身

  选择参数:

    --reference=<目录或文件> 把指定的目录/文件作为参考,把操作的文件/目录设置成参考文件/目录相同拥有者和群组

    --from=<当前用户:当前群组> 只有当前用户和群组跟指定的用户和群组相同时才进行改变

    --help 显示帮助信息

    --version 显示版本信息

使用实例:

chown mail:mail log2012.log