apache pagespeed配置

apache:

<IfModule pagespeed_module>
    ModPagespeed on
    ModPagespeedEnableFilters inline_css
    ModPagespeedEnableFilters lazyload_images
    AddOutputFilterByType MOD_PAGESPEED_OUTPUT_FILTER text/html
    ModPagespeedEnableFilters convert_gif_to_png
    ModPagespeedEnableFilters convert_jpeg_to_progressive
    ModPagespeedEnableFilters convert_jpeg_to_webp
    ModPagespeedEnableFilters convert_png_to_jpeg
    ModPagespeedEnableFilters convert_to_webp_lossless
    ModPagespeedEnableFilters inline_images
    ModPagespeedEnableFilters recompress_images
    ModPagespeedEnableFilters recompress_jpeg
    ModPagespeedEnableFilters recompress_png
    ModPagespeedEnableFilters recompress_webp
    ModPagespeedEnableFilters jpeg_subsampling
    ModPagespeedEnableFilters remove_comments 
    ModPagespeedEnableFilters Combine_css
    ModPagespeedEnableFilters rewrite_javascript,rewrite_css
    ModPagespeedEnableFilters collapse_whitespace,elide_attributes
    ModPagespeedFileCacheInodeLimit 500000
    ModPagespeedFileCachePath "/var/cache/mod_pagespeed/"
</IfModule>

Ubuntu 20.04 Server装完系统需要做的一些事

打开ufw

ufw allow OpenSSH ## 打开SSH端口

ufw enable ## 启动 ufw

ufw status ## 查看 ufw 状态

ufw allow 8888/tcp ## 放行8888端口

安装pip

apt install python3-pip
pip3 config set global.index-url https://mirrors.ustc.edu.cn/pypi/web/simple

安装lamp

apt install apache2
apt install mysql-server ##mariadb-server

安装PHP

apt install php libapache2-mod-php php-mysql php-curl php-gd php-mbstring php-xml php-xmlrpc php-soap php-intl php-zip
systemctl restart apache2

设置mysql

mysql_secure_installation

mysql

创建数据库
CREATE DATABASE zrdn DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

创建用户
CREATE USER 'zrdn'@'%' IDENTIFIED WITH mysql_native_password BY 'password';

给权限
GRANT ALL ON zrdn.* TO 'zrdn'@'%';

安装certbot自动配置HTTPS证书

snap install core; sudo snap refresh core
snap install --classic certbot
ln -s /snap/bin/certbot /usr/bin/certbot
certbot --apache

ufw 放行 apache 端口

ufw allow in "Apache Full" ## 80/443

添加用户

adduser sammy

usermod -aG sudo sammy ## 给 sudo 权限

配置用户执行sudo命令不用输入密码

1.配置单用户不用输入密码

linuxconfig ALL=(ALL) NOPASSWD:ALL

2.配置所有sudo组的用户不用输入密码

%sudo   ALL=(ALL:ALL) NOPASSWD:ALL

xampp 开启gzip压缩

首先编辑php.ini,修改zlib.output_compression 为On

然后编辑httpd.conf,取消注释以下两个模块

LoadModule deflate_module modules/mod_deflate.so
LoadModule filter_module modules/mod_filter.so

接下来在httpd.conf文件最下面加入:

SetOutputFilter DEFLATE 

# Set the path to the directory where you wish to apply the gzip compression
# Usually you would like to apply that to the entire htdocs folder, but you can change it
<Directory "C:/xampp/htdocs">  
    <IfModule mod_deflate.c>
        # Add any file type you want
        AddOutputFilterByType DEFLATE text/html
    </IfModule>
</Directory> 

C:/xampp/htdocs为你要开启gzip压缩的web目录,改为你自己的目录即可

开启之后,我的网站首页打开速度对比

加载内容和时间减少一半

windows服务器配置apache php mariadb

主要参考这篇文章 https://superuser.com/questions/748117/how-to-manually-install-apache-php-and-mysql-on-windows 很详细

首先安装apache,windows apache有两个选择: ApacheHaus 或者 Apache Lounge

我这里选择ApacheHaus

下载最先版本,解压压缩包可以看到一个readme文件,安装里面的操作步骤可以安装apache

接下来配置php,php要下载安全线程版本,php怎么配置就不说了,主要是编辑一下httpd.conf文件,导入php模块

LoadModule php7_module "c:\php\php7apache2_4.dll"

<IfModule php7_module>

    AddHandler application/x-httpd-php .php
    AddType application/x-httpd-php .php .html
    PHPIniDir "c:\php"
</IfModule>

需要注意的地方:

配置虚拟主机

取消注释httpd.conf文件的 Include conf/extra/httpd-vhosts.conf 一行,然后在这个文件里配置虚拟主机

我的配置文件:

<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot "C:\Users\Administrator\Desktop\zrdn"
    ServerName zuoridangnian.com
    DirectoryIndex index.php
</VirtualHost>


<VirtualHost *:443>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot "C:\Users\Administrator\Desktop\zrdn"
    ServerName zuoridangnian.com
    DirectoryIndex index.php
	  SSLEngine on
    SSLCertificateFile "C:\Apache24\conf\ssl\4261553_zuoridangnian.com_public.crt"
    SSLCertificateKeyFile "C:\Apache24\conf\ssl\4261553_zuoridangnian.com.key"
</VirtualHost>

默认rewrite模块的没开的

取消注释 LoadModule rewrite_module modules/mod_rewrite.so 一行

然后还需要将AllowOverride改为All

ubuntu 20.04更换网站服务器apache为nginx

首先停用apache

systemctl stop apache2

安装nginx和php-fpm

apt install nginx php-fpm

创建nginx配置文件 nano /etc/nginx/sites-available/zrdn.conf

server {
    listen 80;
    server_name zuoridangnian.com;
    root /var/www/zrdn;

    index index.html index.htm index.php;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

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

    location ~ /\.ht {
        deny all;
    }

}

启用站点

ln -s /etc/nginx/sites-available/zrdn.conf /etc/nginx/sites-enabled

重启nginx

systemctl restart nginx

配置ssl证书,安装certbot nginx

apt-get install certbot python3-certbot-nginx

配置证书

certbot –nginx

选择域名,然后选择第二项,renew 更新证书,然后因为我用了cloudflare的cdn,所以选择No Redirect

如果你也用了cloudflare 并且ssl是flexible模式,则你vps其实可以不用安装ssl证书

重载一下nginx,大功告成

systemctl restart nginx

修改.htaccess文件设置php上传最大值

php_value upload_max_filesize 100M
php_value post_max_size 100M

Ubuntu安装最新版本的Apache

1.添加第三方PPA

sudo add-apt-repository ppa:ondrej/apache2
sudo apt update

2.安装apache

sudo apt install apache2

Ubuntu安装最新版本PHP并设置Apache使用版本

ubuntu16.04默认php版本7.0,18.04是7.2,而最新的php版本是7.3
1.添加php apt储存库

apt-get install software-properties-common
add-apt-repository ppa:ondrej/php
apt-get update

2.然后安装指定的php版本

apt-get install php7.3

然后根据需要安装模块

apt-get install php-pear php7.3-curl php7.3-dev php7.3-gd php7.3-mbstring php7.3-zip php7.3-mysql php7.3-xml

查看版本

➜  ~ php -v
PHP 7.3.0-2+ubuntu16.04.1+deb.sury.org+1 (cli) (built: Dec 17 2018 09:22:12) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.0-dev, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.3.0-2+ubuntu16.04.1+deb.sury.org+1, Copyright (c) 1999-2018, by Zend Technologies

cli的版本已经是最新的了
3.设置apache使用的版本
在Debian系中可以直接使用

a2dismod php7.0
a2enmod php7.3

然后重启apache即可
 

还是apache配置起来舒服

想试试nginx,据说占用资源比apache要少很多,然后配置半天又看了看wordpress对nginx的重写配置,怎么这么麻烦,最后还是无奈换回apache了,虽然说更占内存,但用的舒服

Apache mod_proxy 反向代理教程

一、启用必要模板

首先,你需要在Apache中启用mod_proxy模块以及几个附属模块:

  • mod_proxy:用于重定向连接的主代理Apache模块,它允许Apache充当底层应用程序服务器的网关。
  • mod_proxy_http:它增加了对代理HTTP连接的支持。
  • mod_proxy_balancermod_lbmethod_byrequests为多个后端服务器添加负载平衡功能。

执行以下命令启用

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_balancer
sudo a2enmod lbmethod_byrequests

接着重启Apache生效

sudo systemctl restart apache2

二、安装后端服务器

为了更好的演示,这里简单安装一下 flask 来作为后端服务器。
首先更新软件包列表

sudo apt-get update

然后安装 pip

sudo apt-get -y install python3-pip

接着安装 flask

sudo pip3 install flask

然后创建第一个后台程序,加入如下内容

from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
    return 'This is first server!'

该程序会在你访问根目录时返回一个 This is first server!
然后创建第二个程序,返回 This is second server!

from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
    return 'This is second server!'

然后分别启动这两个服务

$ FLASK_APP=~/backend1.py flask run --port=8080 >/dev/null 2>&1 &
$ FLASK_APP=~/backend2.py flask run --port=8081 >/dev/null 2>&1 &

接着使用 curl 返回这两个端口内容

curl http://127.0.0.1:8080/
// This is first server!
curl http://127.0.0.1:8081/
// This is second server!

执行killall flask命令可以杀死所有的 flask 程序。

三、启动代理服务器

编辑Apache的虚拟主机配置文件

$ sudo nano /etc/apache2/sites-available/000-default.conf

找到VirtualHost块,替换为如下内容

<VirtualHost *:80>
    ProxyPreserveHost On
    ProxyPass / http://127.0.0.1:8080/
    ProxyPassReverse / http://127.0.0.1:8080/
</VirtualHost>

指令解释:

  • ProxyPreserveHost使Apache将原始Host标题传递给后端服务器。它使后端服务器知道用于访问应用程序的地址。
  • ProxyPass是主要的代理配置指令。上面的配置文件中表示在根URL(/)下的所有请求都应映射到给定地址的后端服务器。例如,如果Apache获得请求URL为 /example,它将映射到 http://127.0.0.1:8080/example
  • ProxyPassReverse具有与 ProxyPass 相同的功能。它告诉Apache修改来自后端服务器的响应头。这确保了如果后端服务器返回一个位置重定向头,客户端的浏览器将被重定向到代理地址,而不是后端服务器地址。

然后重启 apache 服务生效

$ sudo systemctl restart apache2

启动负载均衡

将上述VirtualHost块替换为如下内容,启用负载平衡

<VirtualHost *:80>
<Proxy balancer://mycluster>
    BalancerMember http://127.0.0.1:8080
    BalancerMember http://127.0.0.1:8081
</Proxy>
    ProxyPreserveHost On
    ProxyPass / balancer://mycluster/
    ProxyPassReverse / balancer://mycluster/
</VirtualHost>

然后重启Apache后,当你多次访问Web页面时,有时候会传递 This is first server!,而有时则是 This is second server!。

其它代理模块

这些模块使用不同的网络协议

  • mod_proxy_ftp 为FTP。
  • mod_proxy_connect 用于SSL隧道。
  • mod_proxy_ajp 用于AJP(Apache JServ协议),如基于Tomcat的后端。
  • mod_proxy_wstunnel 为网络套接字。

参考

更改文章链接后重定向配置

刚才更换了一下网站的固定链接,改完之后肯定要对原来的文章作一下301重定向才行。
WordPress有一个优点就是,当你更改固定链接后,它会自动把你所有文章都301重定向到新链接,或者说它路由应该就是这么写的,例如你文章的标题为post_name,无论你使用哪种格式的去访问,例如/blog/2018/06/post_name或者/2018/06/11/post_name,它最后都会帮你重定向到你当前设置的链接格式,经过测试,它使用的是301永久重定向
但是如果你用Jekyll、Hexo、Typecho等就没有这个功能了,只能自己写规则了
按道理说,如果文章名没有改的话,批量重定向应该也不难,例如我之前是/YYYY/MM/DD/NAME/的格式,我想改成/blog/YYYY/MM/DD/NAME.html,在你的服务器上写一条使用正则表达式匹配到二者的区别就行了
所以这里就要说一句了,无论你学什么技术,走哪个方向,一定要把基础打好,正则表达式就是基础!
写不出来规则,就只能这样了
TIMpicpic20180611201608.png
当然我肯定也不是一个一个复制上去的,那会累死的。
先使用WordPress将所有文章的链接输出,然后批量替换一下就行了,也不麻烦,当然我更建议使用正则去写,利于维护。

[简记]Apache htaccess https重定向到http写法

RewriteEngine on
RewriteBase /
RewriteCond %{SERVER_PORT} !^80$
RewriteRule ^.*$ http://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]

.htaccess常用跳转规则

301跳转规则

必须运行的是apache服务器

下文写法是将不带www的跳转到带www的网址

具体的写法如下 大家可以参考

自行修改其中的url即可 如果不行 请检查服务器环境

Options +FollowSymLinks
rewriteEngine on
rewriteCond %{http_host} ^zuoridangnian.com [NC]
rewriteRule ^(.*)$ http://www.zuoridangnian.com/$1 [R=301,L]

404规则

ErrorDocument 404 /404.html

如果上面的规则不生效,使用

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /404.html [L]

非HTTPS跳转至HTTPS规则

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.domain.com/$1 [R,L]