运维笔记-nginx详解

2023-11-03

目录

1.简介

2.正向代理与反向代理

3.nginx的安装部署(基于Centos-stream操作系统)

4.nginx配置文件详解

5.高效的Web服务器-nginx

5.1nginx服务器基本配置 

5.2nginx-基于IP的访问控制

5.2基于授权的访问控制

5.3apache与nginx的访问控制对比

6.反向代理服务器-nginx

6.1.配置环境说明

6. 2.反向代理配置

6.3.负载均衡

7.工作状态统计监控开启

8.nginx实现动静态文件分离

8.1匹配规则介绍

 8.2动静态文件分离配置

9.nginx的会话保持

9.1基于ip_hash的会话保持

         9.2基于cookie的会话保持

10.nginx常用功能与实现模块 

11.nginx性能调优



1.简介

nginx因为它的稳定性、丰富的模块库、灵活的配置和低系统资源的消耗而得到广泛使用。当它用作Web服务器时,相比较于apache,它在处理静态文件方面效率更高,具有高并发、占用资源少的优点。其次它作为反向代理的时候,可以实现负载均衡。本篇文章主要从这两个主要功能来介绍nginx

2.正向代理与反向代理

这里插播一条介绍,nginx一大功能是反向代理,什么是反向代理?而与之相对的正向代理又是什么?两者又有何区别?

正向代理与反向代理部署位置都是在客户端与服务端之间,正向代理代理的是客户端,反向代理代理的是服务端。正向代理可以隐藏客户端信息,解决访问限制的问题,可以用缓存提高访问效率,也可以访问一些正常无法访问的网站(譬如翻墙外网等)。反向代理隐藏服务端网络信息,起到一个安全保护的作用,且可以实现负载均衡。

3.nginx的安装部署(基于Centos-stream操作系统)

nginx的安装很简单,这里介绍的是使用yum一键安装所需软件包,然后进行编译安装。所需要安装的软件有:zlib、zlib-devel、pcre、pcre-devel、openssl、openssl-devel、GCC

1、使用如下命令进行安装软件包

yum install -y zlib zlib-devel openssl openssl-devel gcc pcre pcre-devel

2、软件包安装完成后,从以下网站下载nginx的tar包,可自定义下载路径,然后解压

wget http://nginx.org/download/nginx-1.21.6.tar.gz

3、解压命令

tar -zxvf nginx-1.21.6.tar.gz

4、解压后进入nginx-1.21.6目录,由于后续可能需要用到安全认证和状态监控功能,所以可先执行如下命令安装两个模块http_stub_status_module 和http_ssl_module

./configure --with-http_stub_status_module --with-http_ssl_module

5、然后开始安装

make && make install

6、安装完成后,nginx服务默认安装路径在/usr/local/nginx/,如下命令启动nginx服务

/usr/local/nginx/sbin/nginx 

7、nginx常用命令

/usr/local/nginx/sbin/nginx -s reload     //重启nginx服务,配置文件修改后重新加载

/usr/local/nginx/sbin/nginx -s stop       //停止nginx服务

/usr/local/nginx/sbin/nginx -t            //检查nginx配置文件

/usr/local/nginx/sbin/nginx -v            //查看nginx版本号

/usr/local/nginx/sbin/nginx -V            //查看nginx已经编译的参数,可以看到这里有刚刚安装的两 
                                            个模块http_stub_status和http_ssl

4.nginx配置文件详解

以下是默认安装的nginx默认配置文件,nginx配置文件路径:/usr/local/nginx/conf/nginx.conf  

nginx配置文件最外层的块是main,main包含events块、http块,而http块中有upstream和一个或多个server块,server块中又有一个或多个location块

//全局配置
#user  nobody;          //默认用户,nobody是一个不能登录的用户,只能看到所有人均可读可写的文 
                          件,用来完成特定的任务,不能登录是为了安全,防止入侵
worker_processes  1;    //工作进程,nginx一般是一个master进程加一个或多个工作进程,这里定义工 
                          作进程数量。该参数一般建议与CPU数量一致

#error_log  logs/error.log;  //错误日志路径,以下可定义错误日志级别,debug模式日志最详细
#error_log  logs/error.log  notice; 
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;  //进程id文件,nginx启动时记载进程号的文件


events {
    use  epoll              //定义nginx工作模式,参数有select/poll/epoll/kqueue/等,epoll是 
                              高效的网络IO模式,一般在linux系统使用;kqueue一般在FreeBSD系统 
                              中使用
    worker_connections  1024; //每个工作进程允许的最大连接数,nginx的最大客户端连接数 
                                =worker_connections*worker_processes
}


http {
    include       mime.types;      //引用mime.types文件中的mime类型定义
    default_type  application/octet-stream;  //定义默认类型为任意的二进制流

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"'; //定义日志文件内容格 
                                                                       式,main为此格式名称

    #access_log  logs/access.log  main;  //日志文件路径并引用上面定义的名为main的日志格式

    sendfile        on;   //高效文件传输模式开关,提高文件读写效率,一般在做Web服务器时打开开关
    #tcp_nopush     on;   //sendfile开关打开时使用,用来防止网络堵塞

    #keepalive_timeout  0;  
    keepalive_timeout  65;  //客户端连接保持的超时时间,超出该时间服务端断开与客户端的连接

    #gzip  on;      //压缩打包传输开关
//一个server块就是一个虚拟主机
    server {        
        listen       80;             //监听端口,默认80
        server_name  localhost;      //服务名称ip或者域名

        #charset koi8-r;             //网页编码格式

        #access_log  logs/host.access.log  main;   //日志路径并引用日志格式 main

        location / {           
            root   html;             //网页发布文件的根目录
            index  index.html index.htm;    //网页发布文件
        }
        
        //下面一段额外添加,为nginx作为反向代理时的负载均衡配置,用upstream块实现
        upstream test {
        ip_hash    //负载均衡调度算法,默认为Weight轮询,还有ip_hash/url_hash/fair算法
        server 192.168.91.128:80 weight=1;   //服务器ip端口配置,Weight轮询算法权重值,值越 
        server 192.168.91.128:81 weight=2;     大被分配到的几率越高
        server 192.168.91.128:82 weight=3;
        }
        
        #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;
        }
        //上面一段配置是指当网页访问报错500/502/503/504时,显示html目录下50x.html文件内容
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;  //被代理服务器ip
        #}
        //上面三行指做php格式的脚本文件的反向代理
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}
        //nginx支持fastcgi功能
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;      //用作Web服务器时的访问控制,禁止访问.htxx格式文件
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;      //支持ssl安全认证功能

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

5.高效的Web服务器-nginx

5.1nginx服务器基本配置 

nginx用作Web服务器时,主要关注如下配置

 安装完nginx后,启动nginx服务即可用浏览器访问http://localhost:80,有可能会遇到访问被拒绝,该情况下检查防火墙80端口是否被放通,防火墙放通使用如下命令

firewall-cmd --list-all  //查看防火墙所有信息

也可以分开查看端口和服务信息
firewall-cmd --list-ports  //查看放行端口信息
firewall-cmd --list-services  //查看放行服务信息


若80端口未放行,使用下面命令放行80端口
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --reload      //防火墙重新加载策略

若http服务未放行,使用下面命令放行http服务
firewall-cmd --permanent --add-services=http  
firewall-cmd --reload      //防火墙重新加载策略

防火墙放通后,访问网页如下,表示nginx成功安装 

关于修改默认发布文件以及发布目录,此处不再赘述,涉及的修改端口等问题可参考另一篇apache运维笔记讲解:CSDNhttps://mp.csdn.net/mp_blog/creation/editor/124062101

5.2nginx-基于IP的访问控制

nginx服务器跟apache服务器一样,通过内置模块http_access_module,通过在location块中设置allow和deny来实现IP的访问控制。配置如下

deny 192.168.91.131;
allow all;
//允许除192.168.91.131以外的客户端访问

此时浏览器访问显示连接被拒绝

5.2基于授权的访问控制

nginx服务器通过内置模块http_auth_basic_module来实现基于授权的访问控制

1./usr/local/nginx/conf/nginx.conf配置文件中添加如下配置:

auth_basic "secret";
auth_basic_user_file /usr/local/nginx/passwd;

2.htpasswd 命令生成用户认证文件,然后根据提示输入test1用户的密码,命令如下:

htpasswd -cm /usr/local/nginx/passwd test1

 3.浏览器访问url,此时提示需要输入用户名密码

5.3apache与nginx的访问控制对比

apache与nginx的访问控制都可以基于ip和授权,两者配置也类似,apache的访问控制配置可参考一下链接:

CSDNhttps://mp.csdn.net/mp_blog/creation/editor/124062101

6.反向代理服务器-nginx

6.1.配置环境说明

之前部署apache时用到的ip和端口环境还在,所以我们这里用nginx作为之前安装的apache服务器的反向代理,环境如下:

apache服务器ip :192.168.91.128

            端口号:80

            界面如下:

6. 2.反向代理配置

配置如下(只需要在location块中加一行proxy_pass:被代理的服务器ip和端口:

location / {
        #    proxy_pass   http://192.168.91.128:80;  //被代理服务器ip
           }

配置完成后重启nginx服务,然后使用访问http://192.168.91.131:80,返回apache服务器网页发布文件内容

6.3.负载均衡

前面讲解配置文件时,提到upstream块,它就是nginx实现负载均衡配置的地方,此处只是最简配置,不涉及参数的修改,配置如下:

    upstream test {
        server 192.168.91.128:80 weight=1;
        server 192.168.91.128:81 weight=2;
        server 192.168.91.128:82 weight=3;
       }
//配置负载均衡,此处使用默认Weight轮询算法,并分别配置权重值,可见根据配置权重值越大,访问概率越高,第一次访问应该访问的是192.168.91.128:82端口
    
    server {
        listen       8090;     //该处为了与上面配置的80端口区分,此处修改为8090端口
        server_name  localhost;



        location / {
            proxy_pass http://test;
            proxy_set_header   Host              $http_host;
            proxy_set_header   X-Real-IP         $remote_addr;

        }
//此处配置负载均衡,此处配置未涉及其它参数更改,基本可以算最简配置,proxy_set_header设置增加文件头,将真实的客户端信息传输到真实服务器上,要不然在真实服务器上收到的客户端信息永远都是代理服务器的ip与主机名。(此处配置了真实ip与主机名)

其中的upstream块中通过一台服务器三个端口来实现多站点访问,此处配置同样可参考:

CSDNhttps://mp.csdn.net/mp_blog/creation/editor/124062101

7.工作状态统计监控开启

前面我们安装了http_stub_status_module模块,这里我们可以开启此模块功能,此模块可以统计nginx自上次启动以来工作状态信息,包含连接活跃数,处理响应请求数等信息

开启配置如下:

location ~ /status {     
        stub_status   on;        //开启状态统计功能
        access_log off;          //关闭此模块的日志
}                      

成功后访问:http://localhost:8090/status,查看状态统计信息如下:

Active connections:当前活跃连接数

第三行三个数字分别表示:当前总共处理了多少个连接/当前总共成功创建的握手次数/当前总共处理了多少次请求

Reading:表示Nginx读取到客户端Header信息数

Writing:Nginx返回给客户端的Header信息数

Waiting:表示Nginx已经处理完,正在等候下一次请求指令时的驻留连接数

8.nginx实现动静态文件分离

nginx在作为Web服务器时,可以高效的处理静态文件,但是它无法处理动态文件,当收到动态文件请求时,需要用到它的反向代理功能将请求转发给后台的tomcat服务器来处理,两者的搭配,既可以实现动态文件的处理,又可以高效的处理静态文件。

8.1匹配规则介绍

nginx实现动静态文件分离主要使用了location块的url匹配功能,简单介绍如下:

(location =) > (location完整url) > (location ^~) > (location ,*) > (lcoaltion部分起始路径) > (/)

location = 开头表示精确匹配

location ^~ 开头表示url以某个常规字符串开头,理解为匹配 url路径即可。

location ~ 开头表示区分大小写的正则匹配

location ~* 开头表示不区分大小写的正则匹配

location !~和location !~*分别为区分大小写不匹配及不区分大小写不匹配的正则

location / 通用匹配,任何请求都会匹配到。
 

匹配优先级顺序:

  • 首先精确匹配 = ;

  • 其次前缀匹配 ^~;

  • 其次是按照配置文件中的正则匹配; 

  • 然后匹配不带任何修饰符的前缀匹配; 

  • 最后/通用匹配; 

 8.2动静态文件分离配置

                location / {
                        proxy_pass http://x.x.x.x;
                        }
//所有的路径都是/开头,表示匹配所有
                location ~ .*\.(php|php5)?$
                        {
                                proxy_pass http://x.x.x.x;
                        }
//匹配所有以.php或者.php5的URL, ~表示区分大小写
                location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
                        {
                                proxy_pass http://x.x.x.x;
                        }
//匹配以.gif,.jpg,.jpeg,.png,.bmp,.swf结尾的url
                location ~ .*\.(js|css)?$
                        {
                                proxy_pass http://x.x.x.x;
                        }
//匹配以.js或者.css结尾的url
                

上述配置文件表示,匹配上的静态文件分别走相应的代理的url,若都未匹配上则走匹配所有的url 

9.nginx的会话保持

当使用nginx实现负载均衡时,涉及到一个会话保持的问题,即保证同一客户端能够稳定访问后台固定某一台服务器。nginx实现会话保持一般有两种方法,一种是基于ip_hash,另一种是基于cookie。使用ip_hash方法的话会导致负载不均衡,所以一般不推荐;使用基于cookie的方法,需要编译sticky模块,下面对这两种方法做一下介绍

9.1基于ip_hash的会话保持

该方法配置如下,基本原理就是将客户端的ip经过hash转换,同一客户端每次转换后的值是固定不变的,nginx根据该转换值将请求分发至某一固定的服务端。

 upstream test {
        ip_hash
        server 192.168.91.128:80;
        server 192.168.91.128:81;
        server 192.168.91.128:82;
       }
//配置负载均衡算法为ip_hash,该算法通过将某一客户端IP做hash转换,每次访问同一客户端的ip hash转换后的值不变,然后nginx根据该转换后的hash值来固定分配至某一固定服务端
    
    server {
        listen       8090;     //
        server_name  localhost;



        location / {
            proxy_pass http://test;
            proxy_set_header   Host              $http_host;
            proxy_set_header   X-Real-IP         $remote_addr;

9.2基于cookie的会话保持

nginx基于cookie的会话保持需要引入第三方模块sticky,该方法需要浏览器支持cookie,基本原理就是当用户通过nginx访问网站,nginx将请求转发至后台服务器处理,后台处理完成后返回给nginx,nginx会将带有route的cookie返回给客户端,并保存在客户端本地,用户下次访问的时候会将带有route信息的请求发给nginx,nginx根据请求中的route信息来识别分发至上次访问的服务端。

sticky模块的编译安装这里不做赘述,安装完成后配置如下:

upstream test {
        sticky expires=1h domain=test.cn path=/
        server 192.168.91.128:80;
        server 192.168.91.128:81;
        server 192.168.91.128:82;
       }
//配置sticky,expires参数代表cookie的有效期,domain表示作用域,path表示作用的url,默认也为/
    
    server {
        listen       8090;     //
        server_name  localhost;



        location / {
            proxy_pass http://test;
            proxy_set_header   Host              $http_host;
            proxy_set_header   X-Real-IP         $remote_addr;

10.nginx常用功能与实现模块 

 当我们在编译nginx时,可根据需要来添加所需要的模块,nginx有哪些常用模块?nginx的各个功能又是由哪些模块来实现的?本章节做简单介绍

查看nginx编译加载了哪些模块命令:

/usr/local/nginx/sbin/nginx -V

                                                                                                                                                   http_core_module:nginx核心模块,包含核心的一些http参数,对应nginx配置中http块部分

 http_stub_status_module:nginx状态监控模块,可监控nginx工作状态,查看活跃连接数,处理请求数等

 http_ssl_module:安全认证模块,用于加密的http链接

 http_access_module:访问控制模块,可实现基于IP的访问控制,通过allow、deny参数限制访问

 http_auth_basic_module:基于用户的访问控制模块,可实现nginx的账号密码访问

 http_log_module:nginx的访问日志模块,以指定的格式记录客户端访问nginx的日志

 http_upstream_module:nginx负载均衡模块,实现负载均衡功能

 http_gzip_module:实现nginx的压缩功能

 http_proxy_module:实现nginx的反向代理功能模块

 http_rewrite_module:URL重写功能模块,需要安装pcre包

 http_limit_conn_module:用于限制用户的并发连接数以及请求数模块

11.nginx性能调优

1、worker_rlimit_nofile

nginx能打开的最大文件句柄数,理论上应该与ulimit -n配置的最大文件数除以工作进程数的取值保持一致,但由于nginx负载不一定均衡,所以一般建议与ulimit -n取值一致

2、worker_processes、worker_cpu_affinity

nginx工作进程数,一般建议与服务器CPU核数保持一致,或者在高并发情况下取CPU核数*2。

nginx配置cpu亲和性,将每个CPU与工作进程绑定,以减少因CPU核切换而造成的性能损耗

3、use epoll

使用epoll(I/O多路复用模型)处理模型。freebsd系统一般采用kqueue,linux一般采用epoll,windows一般采用icop

4、sendfile on

高效的文件传输模式,用sendfile系统调用替代read()和write()函数调用,减少上下文切换的过程,以此提高性能;一般是作为Web服务器时使用

5、client_max_body_size

客户端允许的上传的最大文件尺寸,即客户端请求上传的文件大小不能超过该值

6、gzip

压缩传输,用户请求的数据经过nginx发往客户端前,nginx根据配置的策略进行压缩,以减小发给客户端的请求内容大小,以节约网站出口带宽,同时加快了数据传输速率

7、worker_priority

工作进程优先级,默认值为0,取值范围-20~+19;取值越小优先级越高,但是一般不建议取值低于内核进程nice值-5

8、accept_mutex、accept_mutex_delay

是否开启accept锁,nginx的accept锁是为了解决nginx的惊群问题而提出的解决措施,以此保证一个请求过来时,仅有单个进程对该请求进行处理。

accept_mutex_delay表示nginx处理epoll_wait的最大超时时间,即最多多长时间后另一个进程能够重新获取accept锁

9.server_tokens

隐藏nginx的版本号,防止获悉版本号后,根据版本号查询到当前版本存在的漏洞,以此做出安全攻击

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

运维笔记-nginx详解 的相关文章

  • 我怎样才能让我的 nextjs with Express 网站在 ssl 上工作

    我们有一个在 Next js 和 Express 上运行的网站 这是在带有 Aapche 的 cPanel 服务器上 并与用作反向代理的 nginx 一起 我需要在网站上安装 ssl 但我对配置应该如何感到非常困惑 我的 server js
  • 在 Apache 上设置虚拟主机(XAMPP、Windows 10)

    我尝试使用 XAMPP 为某些本地站点设置虚拟主机 我执行了后续步骤 在 C xampp apache conf extra httpd vhosts conf 中我添加了
  • 升级到 Yosemite 后 Apache 配置损坏

    昨天我升级到 Yosemite 现在我的 Web 开发本地配置不再起作用 我设法在下面设置了一个 userdir Users user public html我可以通过以下方式访问所有网站localhost user websitename
  • Capistrano 部署后 EC2 服务器中缺少 puma.sock

    通过 capistrano 将 ruby on Rails 项目的生产部署到 ec2 上的实例后 我在 nginx 错误日志中收到以下错误 亚马逊公共主机显示 502 Bad Gateway nginx 1 10 0 Ubuntu 我按照教
  • 包含哈希标记的目标的 Apache 重写规则

    我正在尝试发出重定向 其中目标包含片段标识符部分 我尝试过这个规则 RewriteRule foo bar cgi script foobar 1 2 R L 但是 那 被转换成 23并且 Web 应用程序无法正确解析此 url 我怎样才能
  • XAMPP:连接到本地主机修复? [执着的]

    我刚刚在我的计算机上安装了 XAMPP Windows 1 8 2 端口 80 受到保护 Apache 使用时没有任何问题 也没有任何端口冲突 我总是打开 Xampp 并在控制面板中启动 Apache 和 MySQL 模块 两个模块都在运行
  • 安装失败:无法在 ubuntu 上的 WordPress nginx 中创建目录

    我在本教程的帮助下设置了 WordPress 如何在 ubuntu 18 04 上使用 LEMP 安装 WordPress https www digitalocean com community tutorials how to inst
  • 致命错误:未捕获错误:调用未定义的函数 bcadd()

    安装 eduTrac SIS 并访问 仪表板 后出现此错误 Ubuntu 16 4 PHP 7 0 php7 0 fpm Apache2 Nginx URL 给出错误 500 并显示 nginx error log FastCGI 在 st
  • apache ProxyPass:如何保留原始IP地址

    我们使用 ProxyPass 将所有 r 请求重定向到端口 18080 上的 jboss 如下所示 ProxyPreserveHost on ProxyPass r http localhost 18080 redirectService
  • 如何使用 .htaccess 提供预压缩的 gzip/brotli 文件

    我正在尝试为 html js 和 css 提供预压缩的 gzip brotli 文件 用下面的代码 RewriteEngine on Brotli If the web browser accept brotli encoding Rewr
  • nginx proxy_pass 省略路径

    我已经配置了 nginx 反向代理 location root var www html index index html location login proxy pass http 127 0 0 1 9080 proxy set he
  • 如何让Nginx镜像模块不等待响应

    我们正在尝试使用 Nginx 的模块 ngx http mirror module 将流量镜像到我们的新网络服务器 这似乎会导致我们的产品网络服务器出现延迟问题 打开镜像X小时后 我们观察到Nginx错误日志 2018 07 25 15 5
  • XAMPP 中的根路径

    我遇到这个问题已经有一段时间了 并且广泛寻找答案但没有成功 img src images test jpg 从 根路径 在我的例子中是在 LAMP 中的生产中 获取图像 htdocs images test jpg 无论是从 htdocs
  • 如何重写 URL 而不刷新,例如 GitHub.com

    我在浏览 GitHub com 时注意到 在查看存储库的源代码时 您单击一个文件 源代码会滑入 并且 URL 会发生变化 但页面看起来并没有刷新 有谁知道这是如何做到的 我见过使用 符号完成此操作 尤其是在创建 Flash 站点时 但我从未
  • 保护公用文件夹中的某些文件和文件夹不被查看

    今天我已经为此苦苦挣扎了一段时间 我想要完成的是我需要阻止所有用户访问某些 php 文件和图像以及更多内容 它们位于单独的文件夹中 我正在使用 WAMP 服务器 我不希望用户只能访问该网站 例如 www images crazy cat p
  • 结束 perl 脚本而不等待系统调用返回

    我在 Linux Ubuntu 14 04 上运行一个简单的 apache Web 服务器 并使用 perl CGI 脚本处理一些请求 该脚本使用以下命令启动系统命令system函数 但我希望它立即返回 无论系统调用的结果如何 我一直在传递
  • Angular 2 路由在使用 Apache 进行页面刷新时不起作用

    使用 Angular 2 RC 4 和更新的 angular router 我使用中的答案得到了要在浏览器中显示的路由 URL这个问题 https stackoverflow com questions 34816025 angular2
  • 部署解耦的前端+后端应用程序

    我使用两个完全解耦的组件编写了一个网络应用程序 一个基于 Place Framework 并服务以下请求的 API 类型 api 任何客户 基于解耦的前端AngularJS建造使用grunt build 现在 前端与API但我希望这两个单元
  • 在 CGI 模式下运行时如何覆盖 PHP 配置

    有一些教程告诉我如何在 CGI 模式下运行时覆盖 PHP 配置 但我仍然很困惑 因为很多人都认为服务器运行在 Linux 上 虽然我需要这样做also在 Windows 上 我的主机确实使用 Linux 但我的本地开发计算机使用 Windo
  • 我找不到 poi-ooxml-schemas 的源代码存储库

    好吧 这有点奇怪 我已经从以下位置查看了 apache poi 版本 3 9 源代码http archive apache org dist poi release src http archive apache org dist poi

随机推荐

  • 【网络】https单向认证和双向认证

    前言 之前面试的时候 面试官问我了解过https的双向认证吗 当时 的确不理解 不过没关系 现在就来补上 正文 1 单向认证 还是有必要先说下单向认证 单向认证是我刚开始接触https的时候就了解到的 下面看一下执行流程图 图是网上找的 再
  • 什么网站适合使用cdn?

    高防cdn的主要功能就是加速和防御 通过建设多个cdn节点来防御各种ddos cc等网络攻击 保证网站的稳定运行 那么高防cdn是如何进行防御的呢 1 高防cdn的防御机制是智能多样的 不是单打独斗类型 起内部的智能机制可以应对各种类型的攻
  • 高阶数据结构之图论

    文章目录 图是什么 图的存储 邻接矩阵 邻接表 无向图邻接表存储 有向图邻接表存储 图的遍历 广度优先遍历 BFS 深度优先遍历 DFS 最小生成树 Prim算法 Kruskal算法 最短路径问题 Dijkstra算法 求单源最短路径 Be
  • C++基础:继承,子类继承父类有规范和要求

    文章目录 1 语法 2 成员的访问权限 3 继承关系的构造顺序 4 同名隐藏 5 多种情况 6 派生对象给基类对象的传递 7 多重继承 8 菱形继承 9 对象构造顺序总结 1 语法 继承关系 A is a B 父类 子类 基类 派生类 继承
  • 【C进阶】指针(二)

    六 函数指针数组 数组是一个存放相同类型数据的存储空间 我们已经学习了指针数组 eg int arr 10 整形指针数组 数组 存放的是整形指针 char arr 5 字符指针数组 数组 存放的是字符指针 那么把函数的地址存到一个数组中 那
  • Laravel 使用数组条件查询时 in和or 的用法

    laravel给出了whereIn的用法 users DB table users gt whereIn id 1 2 3 gt get 或者在闭包中使用whereIn ids 1 2 list User where function qu
  • Kalman滤波——初阶入门

    概要 kalman滤波在机器人控制 数字图像等领域应用非常广泛的一种方法 很多人对其名字不能理解 因为kalman滤波在大多数时候表现出来都是将多个数据进行融合 为什么不叫kalman融合呢 如果你有这个疑问 那就说明你对kalman滤波理
  • matlab变量全局化,matlab全局变量global

    matlab global定义全局变量的问题 我写了matlab的一个主函数 放在一个M文件中 然后在这个主函数中调用其可以 前提是两个函数共用变量均需用global声明 例子 保存f m内容如下 function f a b global
  • Python探索Raspberry Pi机器人平台

    随机轨迹 第一代机器人吸尘器在一个无限循环中使用了一种非常简单的算法 直行直到撞到障碍物 转一个随机角度 如果您担心这种行为的清洁质量 那可能是对的 但是从数学角度来看 如果给定无限的时间 只要机器人可以物理上到达 该算法将覆盖整个清洁区域
  • 安装php7+nginx所遇到的一些问题及解决办法

    1 关于nginx启动出现403 forbidden 403表示请求资源的访问被拒绝 那么有可能你的访问地址就没有这个资源 因此解决办法 缺少索引文件index html inde php 比如下面的配置 server listen 80
  • 冒泡排序和快速排序的效率比较

    快速排序 快速排序是通过一趟排序将要排序的数据分割成独立的两部分 其中一部分的所有数都比另外一部分的所有数都要小 然后再按这个方法对这两部分数据分别进行排序 这里初始化i 1 p 0 r 7 j从0至7 这里有一个循环过程 就是拿序列里面的
  • 携手共进,聚力共赢

    2021年3月17日海伯利安宣布与 香港 国金集团 下称国金集团 有限公司达成全面战略合作协议 进一步深化双方在去中心化地图服务和商业地产行业等领域的战略合作 以引领行业发展为导向 海伯利安致力于深耕区块链底层技术 提供优质的去中心化地理空
  • python进阶(异常处理,文件操作)

    python进阶 异常处理机制 try except try except else 结构 发生异常的执行情况 执行 except 块 没有执行 else try except finally 结构 finally 块无论是否发生异常都会被
  • 顺序栈的初始化、构建、入栈,出栈和取栈顶元素

    一 顺序栈的定义 include
  • LENOVO联想笔记本电脑 拯救者Y520-15IKBN(80Y5)原装Win10系统文件,恢复出厂OEM系统

    lenovo联想笔记本电脑 拯救者Y520 15IKBN 1050 1050Ti 80Y5 出厂状态Windows10系统 原装OEM系统镜像 系统自带所有驱动 出厂主题壁纸LOGO Office办公软件 联想电脑管家等预装程序 所需要工具
  • 安装deepin V20 (1002)时如何添加根分区?

    安装deepin V20 1002 时 选择安装分区时提 发现1个错误 修复后既可以继续安装 需要添加1个根分区才那进行安装 请问 如何添加根分区 把这个ext4作为根分区 鼠标挪到这一行点一下 右侧会出现编辑的图标 可以点击进入编辑分区
  • Linux 信号学习

    Linux 信号学习 信号量的基本概念 信号产生的条件 信号如何被处理 信号的异步特质 信号的分类 可靠信号 不可靠信号 实时信号 非实时信号 常见信号与默认行为 信号处理 signal 函数 sigaction 函数 向进程发送信号 ki
  • 检验IP地址有效性

    使用inet aton函数
  • linux系统转换window系统,Window系统改装为linux系统

    以下以安装Centos6 5为例 1 下载资料 1 1 准备一个U盘 大于8G 1 2 下载U盘启动盘制作工具 UltraISO http qunying jb51 net 81 201311 tools UltraISOPortable
  • 运维笔记-nginx详解

    目录 1 简介 2 正向代理与反向代理 3 nginx的安装部署 基于Centos stream操作系统 4 nginx配置文件详解 5 高效的Web服务器 nginx 5 1nginx服务器基本配置 5 2nginx 基于IP的访问控制