00|前排提示
本文涉及的apache、nginx和caddy三者并无优劣之分,各有擅场,在个人博客使用时选取自己喜欢的即可。
如无特殊提示,本文默认环境为Ubuntu Server 20.04(Linux 5.4)、php7.4、php7.4-fpm;软件安装默认使用apt源,安装后配置文件默认在"/etc/{软件名}"下。本文默认读者已经配置开放了相应的防火墙端口,并使用root权限。
01|PHP
使用 apt install php
安装完php之后一般需要安装模块使得php可以与服务器软件、数据库软件配合。
php-cgi
cgi全称是Common Gateway Interface公共网关接口,服务器软件将php请求转发给php-cgi,由php解释执行后,结果再通过php-cgi返回给服务器软件。
现在常用的php-cgi是php-fpm,全称是php fastcgi process manager,php快速公共网关接口进程管理器。使用 apt install php-fpm
安装(或 apt install php7.4-fpm
,数字换成相应的php版本号(使用 php -v
查看),后续服务管理同理)。
php-mysql
为了让php和数据库配合使用需要安装php对相应数据库的模块,不需要额外配置,安装完成即可使用。使用 apt install php-mysql
安装,其它数据库数据库可以使用 apt search {数据库名}
配合 grep
查找相应模块名安装使用。
02|SSL证书
https是在普通http协议上加入安全套接字实现的加密,安全套接字层一般称SSL(security socket layer)。
在apache和nginx中使用的是阿里云轻量应用服务器提供的免费证书,与一般SSL证书的申请分发流程无区别。
SSL证书申请
在控制台申请SSL证书,填入域名和个人信息(姓名、身份证号、地址、邮箱)后,获得一个在TXT类型的DNS记录。按照相应指引在域名解析处设置好"_dnsauth"解析并验证,即可等待下发。下发后下载相应服务器软件的证书并上传到服务器备用。"__dnsauth"记录在证书下发后就可以删除。
03|Apache
经典的服务器软件,在Debian系分发名是"apache2",在Redhat系分发名是"httpd"。“apache/阿帕奇”同时也是武装直升机名字,该名来源于一个被美国人灭族的印第安人部落。
apache的功能多数通过加载模块实现,如php、rewrite、ssl等。一般通过 apt install apache2
安装完成apache后,就可以通过 service/systemctl
对apache服务管理,通过 a2enmod
对apache模块管理。如果不能,如果不能,前者可以自行搜索创建相应脚本;后者可以尝试安装"apache-common"包。
使用php
安装完php-fpm后,Ubuntu会在安装日志末尾提示两条"a2enmod"和"a2enconf"命令,分别用来启用php-fpm模块、启用有关php-fpm模块的默认配置。执行完成后重启apache一般即可配置完成apache+php环境。
可以在默认网页存放位置 /var/www/html/
下使用命令创建测试文件并访问(开启服务器软件和php-fpm服务)查看详情。
echo "<?php phpinfo();" > info.php
使用ssl
安装apache时默认安装了SSL模块但没有启用,我们只需要使用 a2enmod ssl
命令启用即可。启用后可以看到 /etc/apache2/mods-enabled/
目录下多了"ssl.load"和"ssl.conf"两个文件就是成功。
将 /etc/apache2/sites-available/default-ssl.conf
文件使用软连接或者复制到 /etc/apache2/sites-enabled/
目录下,编辑文件配置ssl,本文使用vim。使用 a2enmod
命令启用"rewrite"模块,来将http页面通过301重定向至https页面。
下面是读者的ssl配置,将需要的字段替换即可。
<VirtualHost *:443>
ServerName {your_cert_domain}
DocumentRoot {your_page_dir}
SSLEngine on
SSLCertificateFile {your_crt_filepath}
SSLCertificateKeyFile {yout_key_filepath}
SSLCertificateChainFile {your_chain_crt_filepath}
</VirtualHost>
将下面配置的文件替换读者页面的配置,复制粘贴即可。"RewriteEngine"两项是使用重写模块替换掉http页面。
<VirtualHost *:80>
ServerName {your_second_domain}
ServerAlias {your_main_domain}
DocumentRoot {your_page_dir}
RewriteEngine On
RewriteRule ^/(.*?)$ https://{$ServerName}/$1 [R]
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
04|Nginx
内置邮件服务和反向代理的异步高性能服务器软件,最初由俄罗斯人开发。常用在负载均衡等场景下,分支软件有国人章亦春开发的openresty和淘宝开源的Tengine。
Nginx的模块是在编译时配置,如果使用 nginx -V
没有看到相应模块,需要重新安装有模块的nginx或者自行编译。通过apt安装的nginx默认已经支持cgi和ssl,看到输出中有"fastcgi"和"ssl"一般即可。
反向代理:正向代理是服务器软件为访问的用户提供代理,访问服务器主机上的资源;反向代理为服务器主机提供代理,将负载均衡至每一台服务器,使用户感知只是一台服务器。
使用php
nginx的模块不需要额外开启,因此只需要配置文件即可。nginx配置文件使用server字段对每一台服务器主机单独配置,将 /etc/nginx/sites-available/default
文件复制到 /etc/nginx/sites-enabled/
目录下并修改。需要替换的字段如下,或者取消部分注释即可,在Ubuntu上需要使用unix格式与php-fpm建立联系,tcp格式似乎无法正常使用。localtion行复杂的正则是为了nginx支持php跨站参数,否则默认防盗链设置会阻止像typecho这样的后台登录。
server {
listen 80;
server_name your_domain.com;
root your_page_dir;
index index.html index.htm index.php;
location ~ .*\.php(\/.*)*$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
}
使用ssl
nginx的ssl配置相对简单,只需要在上文的配置文件的server字段加两行配置,指明ssl证书位置即可。
ssl_certificate your_pem_filepath
ssl_certificate_key your_key_filepath
重定向http页面也可以配置实现,作者使用简单粗暴关闭80端口。
05|Caddy
caddy是使用go语言创建的新服务器软件,特点是配置简单人性化同时有不错的性能、支持反向代理。Ubuntu默认不提供caddy源,但可以参考官网指南向包管理器中添加。
apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
添加完成后使用 apt update
获取caddy源并使用 apt install caddy
安装即可。
使用php
caddy配置只需要修改 /etc/caddy/Caddyfile
文件即可,只需如下写几行即可。需要注意的是fastcgi后的星号*必须要有,和root后星号一样,意为匹配所有文件。file_server字段用于支持css这样的静态文件。
your_domain {
root * your_page_dir
file_server
php_fastcgi * unix//run/php/php7.4-fpm.sock
}
使用ssl
只需要在上文your_domain字段增加一行指明证书文件位置即可,可以使用nginx格式证书。
tls your_pem_filepath your_key_filepath
标签:php,nginx,apt,ssl,https,使用,Kyana,your
From: https://www.cnblogs.com/kyana/p/16873191.html