js+referer

nginx配置文件

Nginx(发音为“engine x”)是一个高性能的Web服务器和反向代理服务器。以下是一个简单的Nginx配置文件示例:

user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
    worker_connections 768;
    # multi_accept on;
}

http {
    ##
    # Basic Settings
    ##

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    ##
    # SSL Settings
    ##

    ssl_protocols TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
    ssl_prefer_server_ciphers on;

    ##
    # Logging Settings
    ##

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    ##
    # Gzip Settings
    ##

    gzip on;
    gzip_disable "msie6";

    ##
    # Server Settings
    ##

    server {
        listen 80;
        server_name example.com;
        return 301 https://$server_name$request_uri;
    }

    server {
        listen 443 ssl http2;
        server_name example.com;

        ssl_certificate /path/to/fullchain.pem;
        ssl_certificate_key /path/to/privkey.pem;

        location / {
            proxy_pass http://localhost:8080;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
}

以上是一个简单的Nginx配置文件示例,其中包括了基本设置、SSL设置、日志设置、Gzip设置和服务器设置等。此外,该示例还设置了一个HTTP重定向到HTTPS的server段,并且还包括了如何将请求代理到本地应用程序的location段。

Nginx配置文件可以根据具体的需要进行自定义,例如添加其他server段进行不同端口的监听、添加域名的反向代理等。需要注意的是,在修改Nginx配置文件时,应先备份原有的配置文件,并在更改完成后进行测试以确保无误。

如何分割日志

在Nginx中,可以使用日志切割(log rotation)技术来将日志文件按照时间或大小进行分割,从而实现方便的日志管理和维护。以下是两种常见的日志切割方法:

1. 按时间分割日志:

首先,在Nginx的配置文件中添加以下内容:

access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log;

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                '$status $body_bytes_sent "$http_referer" '
                '"$http_user_agent" "$http_x_forwarded_for"';

log_format rotated '$remote_addr - $remote_user [$time_local] "$request" '
                   '$status $body_bytes_sent "$http_referer" '
                   '"$http_user_agent" "$http_x_forwarded_for"';

map $time_iso8601 $log_suffix {
    "~^(?\d{4})-(?\d{2})-(?\d{2})" $year/$month/$day;
    default                                       "unknown";
}

access_log /var/log/nginx/access_$log_suffix.log rotated;
error_log /var/log/nginx/error_$log_suffix.log;

以上配置中,“access_log”、“error_log”和“log_format”分别指定了访问日志、错误日志和格式,其中“main”是默认的日志格式。接着,“log_format”命令又新增了一个名为“rotated”的日志格式,该格式与“main”格式相同,只是在日志记录时添加了时间戳信息。

然后,“map”命令将时间戳按照“年/月/日”的格式切割,并将结果存储在变量“$log_suffix”中。最后,“access_log”和“error_log”命令中使用“$log_suffix”变量来将日志文件按照年月日的格式进行分割,例如“access_2022/01/01.log”。

2. 按大小分割日志:

另一种常见的日志切割方法是按照日志文件大小进行分割,可以使用第三方工具如logrotate,或者使用Nginx提供的命令。

首先,在Nginx的配置文件中添加以下内容:

access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log;

server {
    # ...
    open_file_cache max=1000 inactive=20s;
    log_not_found off;
    error_log /dev/null crit; # 关闭磁盘上的错误日志,只将严重级别的错误记录到系统日志(/var/log/messages)中
    access_log /var/log/nginx/access.log mylogbuffer;
    log_format mylogbuffer '$remote_addr - $remote_user [$time_local] '
                     '"$request" $status $body_bytes_sent '
                     '"$http_referer" "$http_user_agent" '
                     '"$gzip_ratio"';

    # access_log in memory buffer
    map $status $mylogbuffer_path {
        ~^[23] /var/log/nginx/access_2xx.log buffer=32k;
        ~^[45] /var/log/nginx/access_4xx_5xx.log buffer=32k;
        default /var/log/nginx/access_other_error.log buffer=32k;
    }
    access_log $mylogbuffer_path mylogbuffer;

    location /nginx_status {
        # ...
        access_log /var/log/nginx/status.log status;
        log_not_found off;
    }
}

以上配置中,“access_log”和“error_log”命令分别指定了访问日志、错误日志和格式。其中,“access_log”命令的最后一个参数是“mylogbuffer”,它指定了将访问日志记录到缓冲区(buffer)中,而不是直接记录到磁盘上的文件中。

然后,“map”命令根据状态码对日志进行分类,并将缓冲区的大小设置为32k。最后,“access_log”命令中使用“$mylogbuffer_path”变量来动态地指定日志文件路径和缓冲区大小。

需要注意的是,以上两种日志切割方法都需要在系统中安装相应的工具和模块,例如logrotate和open_file_cache模块等,才能够正常使用。

xdebug断点调试

Xdebug是一款非常强大的调试工具,它支持远程调试、断点调试、性能分析和代码覆盖率等功能。下面是介绍使用Xdebug进行断点调试的步骤:

1. 安装Xdebug扩展:在php.ini文件中添加以下内容,以安装Xdebug扩展。

zend_extension = /path/to/xdebug.so
xdebug.remote_enable = 1
xdebug.remote_autostart = 1

2. 配置PHPStorm:打开设置(Settings),选择“Languages & Frameworks” -> “PHP” -> “Debug”选项卡,在“DBGp Proxy”部分中配置端口号和IDE key

3. 启动调试:在PHPStorm中设置断点,然后在浏览器中请求需要调试的页面,这时会自动启动调试会话。

4. 调试操作:当程序执行到断点时,会停止执行并显示调试面板,可以查看变量值、堆栈信息等。可以使用调试面板上的控制按钮,如“Step Over”(逐行执行)、“Step Into”(进入函数)、“Step Out”(跳出函数)等,来控制程序的执行。

5. 结束调试:当调试会话完成后,关闭浏览器或者点击调试面板上的“Stop”按钮即可结束调试。

需要注意的是,Xdebug的使用需要一定的PHP和调试经验,尤其是对于复杂的程序或者涉及到多个文件的程序。在调试过程中,需要仔细观察变量值、函数调用堆栈等信息,并且可以查看Xdebug的文档和使用样例来进一步了解它的功能和用法。

phpstorm断点调试

vscode断点调试

PHPStorm和VSCode都是非常流行的代码编辑器,都支持PHP断点调试功能。以下是它们的具体操作流程:

### PHPStorm

1. 配置Xdebug:在php.ini文件中添加以下内容,以安装Xdebug扩展。

[xdebug]
zend_extension = "path/to/xdebug.so"
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_port = 9000
xdebug.idekey = PHPSTORM

2. 启动调试服务器:在PHPStorm中点击“Run”菜单 -> “Edit Configurations”选项 -> “PHP Remote Debug”创建或编辑配置,设置服务器的IP地址、端口号等参数。

3. 设置断点:在PHP代码中设置断点,可以使用快捷键Ctrl + F8在当前行创建或删除断点。

4. 启动调试:在PHPStorm中点击“Run”菜单 -> “Debug 'Your Configuration Name'”启动调试会话。当程序执行到断点时,会自动暂停执行并显示调试面板。

5. 调试操作:调试面板中可以查看变量值、函数调用堆栈等信息,并且可以使用控制按钮来控制程序的执行。

6. 结束调试:当调试会话完成后,关闭浏览器或者点击调试面板上的“Stop”按钮即可结束调试。

### VSCode

1. 安装PHP Debug插件:在VSCode中打开扩展商店(Extensions),搜索“PHP Debug”插件并安装。

2. 配置launch.json:在VSCode中创建或编辑launch.json文件,设置调试脚本的路径、运行参数、端口号等参数。示例代码如下:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Listen for XDebug",
            "type": "php",
            "request": "launch",
            "port": 9000,
            "pathMappings": {
                "/var/www/html": "${workspaceRoot}/htdocs"
            }
        }
    ]
}

其中,“port”参数需要与php.ini中的“xdebug.remote_port”值相同。

3. 设置断点:在PHP代码中设置断点,可以使用快捷键F9在当前行创建或删除断点。

4. 启动调试:点击VSCode左侧的调试图标(Debug) -> “Listen for XDebug”启动调试会话。当程序执行到断点时,会自动暂停执行并显示调试面板。

5. 调试操作:调试面板中可以查看变量值、函数调用堆栈等信息,并且可以使用控制按钮来控制程序的执行。

6. 结束调试:当调试会话完成后,关闭浏览器或者点击调试面板上的“Stop”按钮即可结束调试。

需要注意的是,上述步骤仅适用于基于Xdebug进行断点调试的情况。如果使用其他工具或者框架,可能需要特定的配置和调试方法。此外,需要注意PHP版本和调试插件的兼容性问题,尽量使用最新版本的软件和插件以获得更好的体验。

XMLHttpRequest

XMLHttpRequest - Web API 接口参考 | MDN (mozilla.org)

xml是一种数据格式,可以识别各种格式的数据,但是现在很多人都不用了,现在使用json数据

同步与异步传输

同步传输和异步传输是计算机网络中常用的两种数据传输方式:

1. 同步传输:指发送方向接收方发送数据时,必须等待接收方对上一次数据的确认(ACK)才能发送下一条数据。在同步传输中,发送方和接收方需要同时占用系统资源,这可能会导致网络拥塞,并且在高延迟或带宽不足的情况下,数据传输速度会变慢。同步传输适合小块数据或需要精确的数据传输,如文件传输、电子邮件等。

2. 异步传输:指发送方向接收方发送数据时,无需等待接收方对上一次数据的确认就可以发送下一条数据。在异步传输中,发送方和接收方不需要同时占用系统资源,因此可以提高网络利用率,在高延迟或带宽不足的情况下仍然能够保持较高的数据传输速度。异步传输适合大块数据或需要快速响应的数据传输,如视频流传输、实时通信等。

总的来说,同步传输和异步传输各有优缺点,具体的选择需要根据实际情况进行权衡。在实际应用中,往往通过混合使用同步传输和异步传输的方式来实现最优的性能和可靠性。

AJAX

只可同源访问

AJAX是Asynchronous JavaScript and XML(异步的JavaScript和XML)的缩写,是一种基于浏览器端的异步通信技术。AJAX可以在不刷新整个页面的情况下,通过后台服务器与客户端进行数据交互,实现局部更新,从而提高用户体验。

AJAX技术的核心是XMLHttpRequest对象,它可以在后台向服务器发送HTTP请求,并接收服务器返回的数据。当数据传输完成后,可以使用JavaScript动态地将页面的某部分进行更新,而无需重新加载整个页面。除了XMLHttpRequest对象之外,AJAX还需要使用回调函数、DOM操作等技术来实现异步通信和页面更新。

AJAX技术可以应用于各种情境下的Web开发,如表单数据验证、实时搜索、局部更新、自动补全等。在实际应用当中,AJAX也常常和其他技术,如JSON、jQuery等一起使用,以达到更好的效果。

尽管AJAX技术可以显著提升Web应用的用户体验,但也需要注意其可能带来的安全问题,如跨站脚本攻击(XSS)、跨站请求伪造(CSRF)等。在开发过程中,需要采取一些措施来防范这些安全威胁,例如使用HTTPS协议、对输入数据进行校验和过滤、对输出数据进行编码等。

CORS

CORS(Cross-Origin Resource Sharing)是浏览器的一种安全机制,用于限制跨域请求资源的访问范围。当一个站点在客户端发起跨域请求另一个站点的数据时,由于同源策略的限制,浏览器默认会阻止跨域的请求。CORS 机制允许 Web 应用服务器进行跨域访问控制,从而使浏览器安全地发起跨域请求并获取响应结果。通过设置响应头中的 Access-Control-Allow-Origin 字段值,可以指定允许的来源域名和跨域请求访问的 HTTP 方法,从而规定了跨域资源共享的规则。

sqllabs

SQLabs是一个数据库管理和开发工具集,包括了SQL管理中心(SQLiteManager)和MySQL管理中心(MySQLMan)。这个工具集旨在为开发人员和数据库管理员提供一个直观的、快速的、可视化的管理和访问数据库的方法。

通过SQLabs,用户可以对数据库进行可视化管理,例如:创建新的表、编辑表结构、运行SQL查询、导出数据等功能。此外,SQLabs还提供了一些高级功能,如:数据同步、数据备份、数据恢复、数据比较等。此工具集兼容于Windows、Mac OS X以及Linux平台,并提供了免费和商业版两种版本供用户选择。

HTML5将图片转换成base64编码

在HTML5中,可以使用Canvas对象将图片转换为Base64编码。具体步骤如下:

1.使用img标签加载图片文件:

example

2.在JavaScript代码中获取图片对象:

var img = document.getElementById("myImg");

3.创建一个Canvas对象,并将宽度和高度设置为与图片相同:

var canvas = document.createElement("canvas");
canvas.width = img.width;
canvas.height = img.height;

4.将图片绘制到Canvas上:

var ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0);

5.将Canvas上的图像数据转换为Base64编码:

var base64Img = canvas.toDataURL("image/png");

这样,我们就可以将HTML5中的图片转换为Base64编码了。注意,toDataURL方法可以支持不同的图片格式,例如JPEG、PNG等。

json数据字符串都为双引号

TCP

TCP(Transmission Control Protocol)是一种基于连接的、可靠的、面向字节流的传输协议。它是一种基于IP协议的传输层协议,用于在不同网络之间传输数据。

TCP通过三次握手建立连接,并通过对各种网络异常进行适当的处理来确保数据传输的可靠性。在TCP协议中,每一段数据都被分割成多个小的数据包进行传输,并通过序号和确认号确保数据的有序传输和可靠性。

TCP协议的特点包括:
1. 基于连接:在数据传输前需要建立连接,并在传输结束后释放连接;
2. 可靠性:通过序号和确认号保证数据传输的可靠性;
3. 面向字节流:将数据视为连续的字节流进行传输;
4. 数据分割:将长的数据拆分成多个小的数据包进行传输;
5. 流量控制:通过滑动窗口机制控制数据传输的速率;
6. 拥塞控制:通过慢启动等机制避免网络拥塞。

TCP协议被广泛应用于各种互联网应用程序中,例如Web浏览器、电子邮件、文件传输协议等。

你可能感兴趣的:(javascript,服务器,nginx)