商业网站建设实训指导书Wordpress与dw

当前位置: 首页 > news >正文

商业网站建设实训指导书,Wordpress与dw,wordpress 变私有云,国外服务器下载一、Niginx是什么#xff1f; Nginx是一个高性能的HTTP和反向代理web服务器#xff0c;同时也提供了IMAP/POP3/SMTP服务。Niginx是一款轻量级的web服务器/反向代理器#xff0c;Nginx是高性能的HTTP和 反向代理的web服务器#xff0c;处理高并发的能力十分强大#xff0c…一、Niginx是什么 Nginx是一个高性能的HTTP和反向代理web服务器同时也提供了IMAP/POP3/SMTP服务。Niginx是一款轻量级的web服务器/反向代理器Nginx是高性能的HTTP和 反向代理的web服务器处理高并发的能力十分强大能够经受高负载的考验高达5万个并发连接数。Nginx支持热部署启动简单可以做到 7 * 24小时不间断运行几个月都不需要重新启动。Nginx采用 多进程(单线程)多路IO复用模型一个master进程和多个worker进程woker进程的数量一般和CPU数量一致 二、Nginx的反向代理(正向代理) 解释一下 正向代理 我们平时需要访问国外的浏览器是不是很慢比如我们要看推特看GitHub等等。我们直接用国内的服务器无法访问国外的服务器或者是访问很慢。所以我们需要在本地搭建一个服务器来帮助我们去访问。那这种就是正向代理。浏览器中配置代理服务器 反向代理 那什么是反向代理呢。比如我们访问淘宝的时候淘宝内部肯定不是只有一台服务器它的内部有很多台服务器那我们进行访问的时候因为服务器中间session不共享那我们是不是在服务器之间访问需要频繁登录那这个时候淘宝搭建一个过渡服务器对我们是没有任何影响的我们是登录一次但是访问所有这种情况就是 反向代理。对我们来说客户端对代理是无感知的客户端不需要任何配置就可以访问我们只需要把请求发送给反向代理服务器由反向代理服务器去选择目标服务器获取数据后再返回给客户端此时反向代理服务器和目标服务器对外就是一个服务器暴露的是代理服务器地址隐藏了真实服务器的地址。在服务器中配置代理服务器 三、Nginx的负载均衡 什么是负载均衡 负载均衡建立在现有网络结构之上它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。 负载均衡Load Balance其意思就是分摊到多个操作单元上进行执行例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等从而共同完成工作任务。 简单来说就是现有的请求使服务器压力太大无法承受所有我们需要搭建一个服务器集群去分担原先一个服务器所承受的压力那现在我们有ABCD等等多台服务器我们需要把请求分给这些服务器但是服务器可能大小也有自己的不同所以怎么分如何分配更好又是一个问题。 3.1 Nginx提供的三种负载均衡的方式 轮询法(默认方法) 每个请求按照时间顺序逐一分配到不同的后端服务器如果后端服务器down掉能自动剔除宕机的服务器。 # 服务器三台server1 server2 server3请求过来会按照时间顺序逐一转发 第一次请求 server1 第二次请求 server2 第三次请求 server3 第四次请求 server1 第五次请求 server2 第六次请求 server3 。。。# 服务器三台 server1 server2 server3请求过来会按照时间顺序逐一转发 第一次请求 server1 第二次请求 server2 第三次请求 server3 第四次请求 server1 第五次请求 server2 第六次请求 server3 。。。 weight权重模式(加权轮询) 指定轮询的几率weight和访问比例成正比用于后端服务器性能不均的情况。 这种方式比较灵活当后端服务器性能存在差异的时候通过配置权重可以让服务器的性能得到充分发挥有效利用资源、权重越大。被访问的概率越大 # 服务器三台 server1 1 server2 1 server3 3请求过来会按照时间顺序逐一转发 第一次请求 server1 第二次请求 server2 第三次请求 server3 第四次请求 server3 第五次请求 server3 第六次请求 server1 。。。 ip_hash 上述方式存在一个问题在负载均衡系统中假如用户在某台服务器上登录了那么该用户第二次请求的时候因为我们是负载均衡系统每次请求都会重新定位到服务器集群中的某一台那么已经登录某个服务器的用户再重新定位到另一个服务器其登录信息将会丢失这样显然不妥。 我们可以采用ip_hash指令解决这个问题如果用户已经访问了某个服务器当用户再次访问时会将该请求通过哈希算法自动定位到该服务器每个请求按访问ip的hash结果分配这样每个访客固定访问一个后端服务器可以解决session的问题四、Nginx的动态分离 Nginx的静态处理能力很强但是动态处理能力不足因此在企业中常用动静分离技术。动静分离技术其实是采用代理的方式在server{}段中加入带正则匹配的location来指定匹配项针对PHP的动静分离静态页面交给Nginx处理动态页面交给PHP-FPM模块或Apache处理。在Nginx的配置中是通过location配置段配合正则匹配实现静态与动态页面的不同处理方式 目前通过使用Nginx大大提高了网站的响应速度优化了用户体验让网站的健壮性更上一层楼 五、Nginx的安装 yum install nginx 配置文件 user root; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid;# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic. include /usr/share/nginx/modules/.conf;events {worker_connections 1024; }http {log_format main \(remote_addr - \)remote_user [\(time_local] \)request \(status \)body_bytes_sent \(http_referer \)http_user_agent $http_x_forwarded_for;access_log /var/log/nginx/access.log main;sendfile on;tcp_nopush on;tcp_nodelay on;keepalive_timeout 65;types_hash_max_size 4096;include /etc/nginx/mime.types;default_type application/octet-stream;# Load modular configuration files from the /etc/nginx/conf.d directory.# See http://nginx.org/en/docs/ngx_core_module.html#include# for more information.include /etc/nginx/conf.d/.conf;add_header Access-Control-Allow-Origin ;add_header Access-Control-Allow-Headers X-Requested-With;add_header Access-Control-Allow-Methods GET,POST,OPTIONS;server {listen 80;listen [::]:80;server_name _;# root /root/xj/data/mysite;root /usr/share/nginx/html;# Load configuration files for the default server block.include /etc/nginx/default.d/.conf;error_page 404 /404.html;location /404.html {}error_page 500 502 503 504 /50x.html;location /50x.html {}}# Settings for a TLS enabled server. #

server {

listen 443 ssl http2;

listen [::]:443 ssl http2;

server_name _;

root /usr/share/nginx/html;

#

ssl_certificate /etc/pki/nginx/server.crt;

ssl_certificate_key /etc/pki/nginx/private/server.key;

ssl_session_cache shared:SSL:1m;

ssl_session_timeout 10m;

ssl_ciphers HIGH:!aNULL:!MD5;

ssl_prefer_server_ciphers on;

#

# Load configuration files for the default server block.

include /etc/nginx/default.d/*.conf;

#

error_page 404 /404.html;

location /40x.html {

}

#

error_page 500 502 503 504 /50x.html;

location /50x.html {

}

}} 启动nginx

systemctl start nginx 访问80端口效果如下 六、Nginx常用命令 whereis nginx # 查看nginx路径 nginx: /usr/sbin/nginx /usr/lib64/nginx /etc/nginx /usr/share/nginx /usr/share/man/man3/nginx.3pm.gz /usr/share/man/man8/nginx.8.gz启动/user/sbin/nginx 指定文件启动/user/sbin/nginx -c /etc/nginx/nginx.conf 停止/user/sbin/nginx -s stop 安全退出/user/sbin/nginx -s quit 重新加载/user/sbin/nginx -s reload 如果修改了配置文件就需要重新加载 或者 systemctl start nginx systemctl restart nginx systemctl stop nginx 七、Nginx文件结构 … #全局块events { #events块… }http #http块 {… #http全局块server #server块{ … #server全局块location [PATTERN] #location块{…}location [PATTERN] {…}}server{…}… #http全局块 } 1、全局块配置影响nginx全局的指令。一般有运行nginx服务器的用户组nginx进程pid存放路径日志存放路径配置文件引入允许生成worker process数等。 user nobody; # nginx运行的用户身份一般要么注释掉要么把nobody 改成 www 或 nginx worker_processes auto; # 工作进程数(如果是双核4线程可以设置为4一般建议和CPU的逻辑核数量一致) error_log /var/log/nginx/error.log; # 全局指定nginx错误日志的存放目录 pid /run/nginx.pid; # 指定nginx的pid文件目录 2、events块配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数选取哪种事件驱动模型处理连接请求是否允许同时接受多个网路连接开启多个网络连接序列化等。 worker_connections 1024;

最大可以调整到100,000以上 nginx的最大并发连接数 worker_processes * worker_connections(进程数*连接数) 3、http块可以嵌套多个server配置代理缓存日志定义等绝大多数功能和第三方模块的配置。如文件引入mime-type定义日志自定义是否使用sendfile传输文件连接超时时间单连接请求数等。 # 导入mime.types模块让nginx能够识别各种各样的文件资源

include mime.types;

nginx默认识别的mime.types默认采用二进制数据格式。

default_type application/octet-stream; ​

设置客户端访问nginx的访问日志格式

log_format main \(remote_addr - \)remote_user [\(time_local] \)request \(status \)body_bytes_sent \(http_referer \)http_user_agent $http_x_forwarded_for;

开启访问日志

access_log logs/access.log main; ​

Nginx在进行数据传输会调用sendfile()函数 Linux 2.0 以后的推出的一个系统调用。

对比一般的数据的网络传输sendfile会有更少的切换和更少的数据拷贝。

sendfile on; tcp_nopush on; ​

客户端保持连接时间

#keepalive_timeout 0; keepalive_timeout 65; ​

开启网络传输的数据gzip压缩[会额外消耗一定的cpu资源但是会节约大量的出口带宽来提高访问速度gzip压缩算法的使用会带来一定的安全隐患不建议压缩图片和大文件]

gzip on; #低于1kb的资源不压缩 gzip_min_length 1k; ​

设置压缩级别级别范围1~9数字越大压缩率越高同时消耗cpu资源也越多建议设置在5左右。

gzip_comp_level 5;

指定压缩哪些MIME类型的静态资源多个空格隔开。不建议压缩图片视频等二进制文件

gzip_types text/plain application/javascript application/x-javascript text/javascript text/xml text/css;

web站点的虚拟主机类似python的虚拟环境这里的配置会让nginx自动提供一个站点给外界访问

指定包含的配置文件

可以设置多个 server 模块

include /etc/nginx/conf.d/.conf; 4、server块配置虚拟主机的相关参数一个http中可以有多个server。 server {# 站点的访问端口要允许外界访问还需要设置防火墙listen 80;# 站点的访问域名地址server_name www.luffycity.dabanyu.com;#charset koi8-r;#access_log logs/host.access.log main;# 地址模式匹配location后面的是访问url路径相当于django的正则路由一样# 地址匹配成功以后则会调用当前花括号的配置信息location / {# root 表示当前站点所在目录root html;# index 指定默认首页index main.html main.htm;}…} 5、location块配置请求的路由以及各种页面的处理情况。 在proxy_pass 中的代理url后加上/代理转发的url中就不会带着location中匹配路径 如果后面没有/代理转发的url中就会带上location中的匹配路径 我们访问 http://my.yemao.com/proxy/index.html其实是访问到了 http://test.yemao.com/index.html正在上传…重新上传取消
我们访问 http://my.yemao.com/proxy/index.html其实是访问到了 http://test.yemao.com/proxy/index.html。这里将 location 中 匹配的 proxy 也自动加到了 代理转发的地址后面 如果nginx代理的三个服务器都要在端口
:80上监听。那么nginx首先决定那个服务器应该处理请求 [注解]  listen 监听某个ip和端口并根据传来的请求中“Host”字段匹配server_name。然后转给server_name 服务器去处理 nginx是根据请求中的Host字段来决定应当将这个客户端的请求转发给哪一个web服务器这个Host的值应当是与某一个server_name 相匹配的。 但是 如果其值与任何服务器的 server_name 都不匹配或者请求根本不包含Host字段则nginx会将请求转发到此端口的默认服务器。 在上面的配置中默认服务器是第一个 ,这是nginx的标准默认行为。 server {listen 80; # 监听端口server_name example.org www.example.org; # 服务器名称… }server {listen 80;# 监听端口server_name example.net www.example.net;# 服务器名称… }server {listen 80;# 监听端口server_name example.com www.example.com;# 服务器名称… } 它也可以使用listen指令中的default_server参数明确设置哪个服务器应该是默认的如下所示 example.net www.example.net 将是默认的 server_name如果一个server_name都匹配不上则会将请求转给默认服务器 server {listen 80 default_server; # 监听端口 将此虚拟服务器设置为默认服务器server_name example.net www.example.net; # 服务器名称… } 请注意默认服务器是监听端口listen的属性而不是 server_name 的属性。 如果客户端的请求中没有Host字段那么我们可以定义配置文件来扔掉这类的客户端请求。 如下的配置中server_name 设置为一个空字符串它将匹配没有“Host”头字段的请求并返回一个特殊的nginx非标准代码444来关闭连接。 server {listen 80;server_name ;return 444; } 现在我们知道了nginx 配置中是如何选择服务器来处理请求的了 那么在指定的服务器中由哪一个location 来处理请求呢需要通过location的匹配规则来决定 匹配location 的过程如下 location匹配命令 ~  表示执行一个正则匹配区分大小写 * 表示执行一个正则匹配不区分大小写 ^ 表示普通字符匹配如果该选项匹配则只匹配该选项其他选项不匹配。一般用于匹配目录 表示普通字符精确匹配 定义一个自命名的location用于内部定向时使用列如 error_page, try_files 规则优先级 高于 ^~ 高于 ~* 等于 ~ 高于 / 前缀的指令严格匹配这个查询。如果找到停止搜索。 所有剩下的常规字符串最长的匹配。如果这个匹配使用^〜前缀搜索停止。 正则表达式在配置文件中定义的顺序。 如果第3条规则产生匹配的话结果被使用。否则使用第2条规则的结果。 首先nginx 不管location 的顺序而是从location 中找到与请求的url 最匹配、最具体的这个location 前缀。 / 根目录能够匹配到所有的请求也就是说所有的请求都可以由 / 根目录的这个location 来处理。 因此 / 根目录的location 是在没有其他的location 匹配这个url 的时候才会由它处理该请求。 其次nginx 检查由正则表达式组成的location 。一旦找到匹配的location  则停止查找由此location 来处理该请求。 server {listen 80; # 监听本机的80端口server_name example.org www.example.org; # 服务器名root /data/www; location / { # 这里的 / 表示匹配所有的路径index index.html index.php;}location ~* .(gif|jpg|png)\( { # 这里表示为。不区分大小写的正则匹配匹配以gif、jpg、png结尾的请求expires 30d;}location ~ \.php\) { # 这里的正则表示匹配以php结尾的请求fastcgi_pass localhost:9000;fastcgi_param SCRIPT_FILENAME\(document_root\)fastcgi_script_name;include fastcgi_params;} } 举几个例子看看上面的nginx配置是如何处理请求的吧。 请求url “/logo.gif”首先与location 前缀“/” 匹配也与正则表达式 “.(gif|jpg|png)”匹配因此它由第二个location处理。 使用指令root /data/www 将请求映射到文件/data/www/logo.gif并将该文件返回给客户端。 请求url“/index.php”首先和lcoation 前缀 /“匹配也与正则表达式 “.php$  匹配因此由第三个location来处理请求。请求被传递给监听localhost9000的FastCGI服务器。 fastcgi_param指令将FastCGI参数SCRIPT_FILENAME设置为“/data/www/index.php”FastCGI服务器执行该文件。 变量等于指令的值变量 fastcgi_script_name等于请求URI ”/index.php”。 请求“/about.html”仅与location前缀 “/” 匹配因此该请求由此locatoin处理。 使用 “root” 指令值 /data/www将请求映射到文件/data/www/about.html并将文件返回给客户端。 请求“/”仅与 location前缀 “/” 匹配因此该请求由此location处理。然后索引指令根据其参数和 “root” 指令的值/data/www查找文件是否存在。 如果文件/data/www/index.html不存在并且文件/data/www/index.php存在则指令执行内部重定向到“/index.php”并且nginx再次搜索位置 如果请求是由客户发送的。 正如我们之前看到的重定向的请求最终将由FastCGI服务器处理。 需要注意的是只匹配请求url中的非参数部分。这是因为参数可以有很多种方式给出例如 /index.php?userjohnpage1 /index.php?page1userjohn /index.php?page1somethingelseuserjohn # 查询字符串中的内容种类太多了不好匹配 八、Nginx参数详解 worker_processes woker_processes 1|auto; # 指定nginx工作时的进程数设置值小于CPU的核数 worker_connections worker_connections 1024 # 设置Nginx的最大连接数 keepalive_timeout keepalive_timeout 65; # http连接超时时间默认是65s当需要上传大文件时避免文件上传过程中断开连接导致文件上传失败 gzip gzip on; # 对网络传输的数据内容进行压缩 upstream

默认为轮询

upstream backend{server 101.35.241.220:8001;server 150.158.153.179:8002;server 42.194.147.234:8003;}第一个请求 101.35.241.220:8001 第二个请求 150.158.153.179:8002 第三个请求 42.194.147.234:8003 …# 设置权重 upstream backend{server 101.35.241.220:8001 weight1;server 150.158.153.179:8002 weight2 max_fails2 fail_timeout2;;server 42.194.147.234:8003 weight1 max_fails2 fail_timeout1;}# 请求会按照权重进行转发 第一个请求 101.35.241.220:8001 第二个请求 150.158.153.179:8002 第三个请求 150.158.153.179:8002 第四个请求 42.194.147.234:8003 第四个请求 101.35.241.220:8001 。。。 max_fails2允许请求失败的次数默认为1当超过最大次数时返回proxy_next_upstream模块定义的错误。 fail_timeout1在经历了max_fails次失败后暂停服务的时间max_fails可以和fail_timeout一起使用。# 热备和下线 upstream backend{server 101.35.241.220:8001;server 150.158.153.179:8002 down;server 42.194.147.234:8003 backup;}

150.158.153.179:8002 down 不参与转发

42.194.147.234:8003 backup 只有在主服务器挂掉才会生效

server server {listen 80; # 监听的端口server_name localhost; # 声明server_nameHost请求头命中server_name才会走这个server#charset koi8-r;#access_log logs/host.access.log main;location / { # 所有的请求都在走这里root html; # 指定根目录index index.html index.htm;proxy_pass http://backend; # 请求转发proxy_redirect default;proxy_set_header Host \(host;proxy_set_header X_Real_IP \)remote_addr;proxy_set_header X_Forwarded_For $proxy_add_x_forwarded_for;}#error_page 404 /404.html;# redirect server error pages to the static page /50x.html#error_page 500 502 503 504 /50x.html;location /50x.html {root html;}
} 注意点

root

location ^~ /t/ {root /www/root/html/; } 如果一个请求的url是/t/a.html。web服务器会返回服务器上/www/root/html/t/a.html的文件内容# alias location ^~ /t/ {alias /www/root/html/new_t/; } 如果一个请求是/t/a.html。则web服务器会返回服务器上/www/root/html/new_t/a.html使用alias的时候目录名后面一定要加‘/’ alias在使用正则匹配的时候必须捕获要匹配的内容并在指定的内容处使用 alias只能位于location中root可以不放在lication中 如果root在全局中和location中都存在则优先location中的root location ​​​​​​​# 配置该服务的访问规则同一个server可以配置多个location表示精确匹配 ^~ 表示uri以指定字符或者字符串开头的前缀匹配不是正则匹配一旦匹配则不在查找其他匹配项 ~ 表示区分大小写的匹配大小写的正则匹配 * 表示不区分大小写的正则匹配 / 表示通用匹配如果没有其他匹配任何请求都会匹配到规则优先级高于 ^ 高于 ~* 等于 ~ 高于 / 九、负载均衡 http {upstream myapp1 {server srv1.example.com;server srv2.example.com;server srv3.example.com;}server {listen 80;location / {proxy_pass http://myapp1; # 将请求转发到 定义的服务器里列表中}} } 在上面的示例中在srv1-srv3上运行了3个相同应用程序的实例。 如果没有指明配置负载均衡的方法则默认为轮询方式实现负载均衡。 所有请求都代理到服务器组myapp1nginx应用HTTP负载平衡来分发请求。 要为HTTPS而不是HTTP配置负载均衡只需使用“https”作为协议。更多详情见 nginx负载均衡官方文档 Using nginx as HTTP load balancer nginx 配置文件的含义见 菜鸟教程-nginx Nginx 配置详解 | 菜鸟教程 nginx 负载均衡反向代理  Nginx 反向代理与负载均衡详解 | 菜鸟教程 Nginx 服务器安装及配置文件详解 https://www.cnblogs.com/bluestorm/p/4574688.html 根据上面了解到的知识修改 /usr/local/nginx/conf/nginx.conf 为如下 ########### 每个指令必须有分号结束。################# user root; # 配置用户或用户组否则有可能会出错 worker_processes auto; # 允许生成的进程数默认为1 error_log /var/log/nginx/error.log warn; # 指定日志路径级别。这个设置可以放入全局块http块server块级别依次为debug|info|notice|warn|error|crit|alert|emerg pid /run/nginx.pid; # 指定nginx进程运行文件存放地址# Load dynamic modules. See /usr/share/nginx/README.dynamic. include /usr/share/nginx/modules/*.conf;events { # events块worker_connections 1024; # 最大连接数默认为512 }http { # http块include /etc/nginx/mime.types; # 文件扩展名与文件类型映射表default_type application/octet-stream; # 默认文件类型默认为text/plain# log_format main \(remote_addr - \)remote_user [\(time_local] \)request # \(status \)body_bytes_sent \(http_referer # \)http_user_agent $http_x_forwarded_for; # 自定义日志格式# access_log /var/log/nginx/access.log main;sendfile on; # 允许sendfile方式传输文件默认为off可以在http块server块location块。# tcp_nopush on; # tcp_nodelay on;keepalive_timeout 65; #连接超时时间默认为75s可以在httpserverlocation块。# types_hash_max_size 2048;# 设定负载均衡后台服务器列表, backend可以修改为其它名字upstream backend {#ip_hash; # 指定负载均衡的方式3种默认为轮询。server 192.168.10.100:8080 max_fails2 fail_timeout30s ; # 30秒错误2次这台服务器就挂掉server 192.168.10.101:8080 max_fails2 fail_timeout30s ;server 127.0.0.1:8027;server 127.0.0.1:8028;server 127.0.0.1:8029;}server { # server块listen 80; # 通过80端口访问nginx时server_name localhost; # 服务器名监听地址location / { # location块# 请求的url过滤正则匹配为区分大小写*为不区分大小写。对以 / 所有地址进行负载均衡root html; # 定义服务器的默认网站根目录位置。如果locationURL匹配的是子目录或文件root没什么作用一般放在server指令里面或/下# index index.html; #定义路径下默认访问的文件名一般跟着root放# proxy_pass http://mysvr; 请求转向backend定义的服务器列表即反向代理设置被代理服务器的端口或套接字以及URL# deny 127.0.0.1; #拒绝的ip# allow 172.18.5.54; #允许的ip include uwsgi_params;uwsgi_pass backend; # 非集群设置的是uWSGI套接字地址集群则直接使用负载均衡组名# uwsgi_pass 127.0.0.1:5000; # 非集群时使用如果配合uwsgi使用则这里要和uwsgi.ini中的socket一致}location /static/ { # 请求静态文件时将返回/home/myproject/static/xxx alias /home/myproject/static; }error_page 404 /404.html; # 错误页location /40x.html {}error_page 500 502 503 504 /50x.html; # 错误页location /50x.html {}}}