禁用上游响应头部功能

Syntax: proxy_ignore_headers field ...;
Default: —
Context: http, server, location

  功能介绍:某些响应头部可以改变nginx的行为,使用proxy_ignore_headers可以禁用他们生效;

可以禁用的头部功能

X-Accel-Redirect:由上游服务器指定在nginx内部重定向,控制请求的执行

X-Accel-Limit-Rate : 由上游设置发往客户端的速度限制,等同limit_rate指令

X-Accel-Buffering : 由上游控制是否缓存上游的响应

X-Accel-Charset : 由上游控制Content-Type中的Charset

缓存相关:

X-Accel-Expires : 设置响应在nginx的缓存时间,单位秒;@开头表示一天某时刻

Expires:控制nginx缓存时间,优先级低于X-Accel-Expires

Cache-Control:控制nginx缓存时间,优先级低于X-Accel-Expires

Set-Cookie:响应中出现Set-Cookie则不缓存,可通过proxy_ignore_headers禁止生效

Vary:响应中出现Vary:*则不缓存,同样可以禁止生效

转发上游响应指令

Syntax: proxy_hide_header field;
Default: —
Context: http, server, location

  proxy_hide_header 功能:对上游响应中的某些头部,设置不向客户端转发

proxy_hide_header 功能默认不转发的响应包头:

Date :由ngx_http_header_filter_module过滤模块填写,值为nginx发送响应头部时的时间

server:由ngx_http_header_filter_module过滤模块过滤模块填写,值为nginx版本

X-Pad:通常是Apache为避免浏览器BUG生成的头部,默认忽略

X-Accel-:用于控制nginx行为的响应,不需要向客户端转发

proxy_pass_header : 对于已经被proxy-hide-header的头部,设置向客户端转发

配置

[root@python vhast]# cat shangyou.conf
server {
listen 8011;
default_type text/plain;
return 200 '8011 server response.\n';
} server {
listen 8012;
default_type text/plain;
root html;
location /{
add_header aaa 'aaaa value'; 添加aaa字段
}
location /test { return 200 '8012 server response.
uri: $uri
method: $request_method
requset: $request
http_name: $http_name
\n';
}
}
[root@python vhast]# cat upstream.conf upstream rrups{
#ip_hash;
#hash user_$arg_username;
#server 127.0.0.1:8011;
server 127.0.0.1:8012;
#keepalive 32;
}
server {
#set_real_ip_from 192.168.183.4;
#real_ip_recursive on;
#real_ip_header X-Forwarded-For;
server_name www.rrups.com;
access_log logs/upstream.log main;
error_log rrups_error.log info;
location /{
#proxy_pass http://rrups/addurl;
proxy_pass http://rrups;
#proxy_hide_header aaa; #没有屏蔽头部aaa字端
#proxy_method POST;
#proxy_pass_request_headers off;
#proxy_pass_request_body off;
#proxy_set_body 'hello world';
#proxy_set_header name '';
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}

  测试

[root@python vhast]# curl  www.rrups.com -I
HTTP/1.1 200 OK
Server: nginx/1.15.9
Date: Wed, 17 Jul 2019 06:41:13 GMT
Content-Type: text/html
Content-Length: 612
Connection: keep-alive
Last-Modified: Wed, 10 Jul 2019 18:23:02 GMT
ETag: "5d262d06-264"
aaa: aaaa value #
Accept-Ranges: bytes

  屏蔽后测试

[root@python vhast]# cat upstream.conf 

upstream rrups{
#ip_hash;
#hash user_$arg_username;
#server 127.0.0.1:8011;
server 127.0.0.1:8012;
#keepalive 32;
}
server {
#set_real_ip_from 192.168.183.4;
#real_ip_recursive on;
#real_ip_header X-Forwarded-For;
server_name www.rrups.com;
access_log logs/upstream.log main;
error_log rrups_error.log info;
location /{
#proxy_pass http://rrups/addurl;
proxy_pass http://rrups;
proxy_hide_header aaa;
#proxy_method POST;
#proxy_pass_request_headers off;
#proxy_pass_request_body off;
#proxy_set_body 'hello world';
#proxy_set_header name '';
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
[root@python vhast]# curl www.rrups.com -I
HTTP/1.1 200 OK
Server: nginx/1.15.9
Date: Wed, 17 Jul 2019 06:43:23 GMT
Content-Type: text/html
Content-Length: 612
Connection: keep-alive
Last-Modified: Wed, 10 Jul 2019 18:23:02 GMT
ETag: "5d262d06-264"
Accept-Ranges: bytes

  上游服务器头部设置影响下游发送速率

[root@python vhast]# cat shangyou.conf
server {
listen 8011;
default_type text/plain;
return 200 '8011 server response.\n';
} server {
listen 8012;
default_type text/plain;
root html;
location /{
add_header X-Accel-Limit-Rate 10; #在上游服务器,添加代理服务向客户端每秒发送的字节数 }
location /test { return 200 '8012 server response.
uri: $uri
method: $request_method
requset: $request
http_name: $http_name
\n';
}
}

  测试

[root@python vhast]# curl  www.rrups.com -I
HTTP/1.1 200 OK

  

Syntax: proxy_pass_header field;
Default: —
Context: http, server, location

  修改返回的Set-Cookie头部

Syntax: proxy_cookie_domain off;   #修改上游服务器的Set-Cookie的指令;修改域名
proxy_cookie_domain domain replacement;
Default: proxy_cookie_domain off;
Context: http, server, location Syntax: proxy_cookie_path off; # 修改URI部分内容做替换
proxy_cookie_path path replacement;
Default: proxy_cookie_path off;
Context: http, server, location

  修改返回的Location头部

Syntax: proxy_redirect default;
proxy_redirect off;
proxy_redirect redirect replacement;
Default: proxy_redirect default;
Context: http, server, location

  上游返回失败时的处理方法

Syntax: proxy_next_upstream error | timeout | invalid_header | http_500 | http_502 | http_503 |
http_504 | http_403 | http_404 | http_429 | non_idempotent | off ...;
Default: proxy_next_upstream error timeout;
Context: http, server, location

  前提:没有向客户端发送任何内容

配置: error(网络错误) 、timeout(超时后) 、invalid_header(不合法的header) 、http_ (返回http错误码)、non_idempotent (在上游服务器不能使用这个方法时)、off()

限制proxy_next_upstream的时间与次数

Syntax: proxy_next_upstream_timeout time;  #从请求开始选用上游服务的时间
Default: proxy_next_upstream_timeout 0;
Context: http, server, location Syntax: proxy_next_upstream_tries number;# 重试次数
Default: proxy_next_upstream_tries 0;
Context: http, server, location

  用error_page 拦截上游失败的响应;当上游响应码大于等于300时,将响应返回客户端还是按照error_page指令处理

Syntax: proxy_intercept_errors on | off;
Default: proxy_intercept_errors off;
Context: http, server, location

不做修改配置

[root@python vhast]# cat  shangyou.conf
server {
listen 8011;
default_type text/plain;
return 200 '8011 server response.\n';
} server {
listen 8012;
default_type text/plain;
root html;
location /{
add_header X-Accel-Limit-Rate 10; }
location /test { return 200 '8012 server response.
uri: $uri
method: $request_method
requset: $request
http_name: $http_name
\n';
}
} server {
listen 8013;
default_type text/plain;
return 500 '8013 server Internal Error.\n';
} [root@python vhast]# cat proxy_next.conf upstream ps{
#ip_hash;
#hash user_$arg_username;
server 127.0.0.1:8011;
server 127.0.0.1:8013;
#keepalive 32;
}
server {
#set_real_ip_from 192.168.183.4;
#real_ip_recursive on;
#real_ip_header X-Forwarded-For;
server_name rrups.com;
access_log logs/upstream.log main;
error_log rrups_error.log info;
location /{
#proxy_pass http://rrups/addurl;
proxy_pass http://ps;
#proxy_hide_header aaa;
#proxy_method POST;
#proxy_pass_request_headers off;
#proxy_pass_request_body off;
#proxy_set_body 'hello world';
#proxy_set_header name '';
#proxy_http_version 1.1;
#proxy_set_header Connection "";
} location /test { } location /error {
proxy_pass http://ps;
proxy_connect_timeout 1s;
proxy_next_upstream off;
}
location /intercept{
proxy_intercept_errors on;
proxy_pass http://127.0.0.1:8013;
proxy_next_upstream off;
}
location /httperr { proxy_next_upstream http_500;
proxy_pass http://ps;
}
}

  测试

[root@python vhast]# curl  rrups.com/error
8011 server response.
[root@python vhast]# curl rrups.com/error
8013 server Internal Error.
[root@python vhast]# curl rrups.com/error
8011 server response.
[root@python vhast]# curl rrups.com/error
8013 server Internal Error.

  修改上游服务器一个端口

[root@python vhast]# cat  shangyou.conf
server {
listen 8011;
default_type text/plain;
return 200 '8011 server response.\n';
} server {
listen 8012;
default_type text/plain;
root html;
location /{
add_header X-Accel-Limit-Rate 10; }
location /test { return 200 '8012 server response.
uri: $uri
method: $request_method
requset: $request
http_name: $http_name
\n';
}
} server {
listen 8013;
default_type text/plain;
return 500 '8013 server Internal Error.\n';
} [root@python vhast]# vim shangyou.conf
[root@python vhast]# cat shangyou.conf
server {
listen 8011;
default_type text/plain;
return 200 '8011 server response.\n';
} server {
listen 8012;
default_type text/plain;
root html;
location /{
add_header X-Accel-Limit-Rate 10; }
location /test { return 200 '8012 server response.
uri: $uri
method: $request_method
requset: $request
http_name: $http_name
\n';
}
} server {
listen 8014;吧端口修改
default_type text/plain;
return 500 '8013 server Internal Error.\n';
}

  测试

[root@python vhast]# curl  rrups.com/error
8011 server response. [root@python vhast]# curl rrups.com/error
<html>
<head><title>502 Bad Gateway</title></head>
<body>
<center><h1>502 Bad Gateway</h1></center>
<hr><center>nginx/1.15.9</center>
</body>
</html>

  修改配置

[root@python vhast]# cat proxy_next.conf 

upstream ps{
#ip_hash;
#hash user_$arg_username;
server 127.0.0.1:8011;
server 127.0.0.1:8013;
#keepalive 32;
}
server {
#set_real_ip_from 192.168.183.4;
#real_ip_recursive on;
#real_ip_header X-Forwarded-For;
server_name rrups.com;
access_log logs/upstream.log main;
error_log rrups_error.log info;
location /{
#proxy_pass http://rrups/addurl;
proxy_pass http://ps;
#proxy_hide_header aaa;
#proxy_method POST;
#proxy_pass_request_headers off;
#proxy_pass_request_body off;
#proxy_set_body 'hello world';
#proxy_set_header name '';
#proxy_http_version 1.1;
#proxy_set_header Connection "";
} location /test { } location /error {
proxy_pass http://ps;
proxy_connect_timeout 1s;
proxy_next_upstream error; 从off改为error
}
location /intercept{
proxy_intercept_errors on;
proxy_pass http://127.0.0.1:8013;
proxy_next_upstream off;
}
location /httperr { proxy_next_upstream http_500;
proxy_pass http://ps;
}
}

  测试

[root@python vhast]# curl  rrups.com/error
8011 server response.
[root@python vhast]# curl rrups.com/error
8011 server response.
[root@python vhast]# curl rrups.com/error
8011 server response.
[root@python vhast]# curl rrups.com/error
8011 server response.

  恢复上游服务器

[root@python vhast]# cat  shangyou.conf
server {
listen 8011;
default_type text/plain;
return 200 '8011 server response.\n';
} server {
listen 8012;
default_type text/plain;
root html;
location /{
add_header X-Accel-Limit-Rate 10; }
location /test { return 200 '8012 server response.
uri: $uri
method: $request_method
requset: $request
http_name: $http_name
\n';
}
} server {
listen 8013;
default_type text/plain;
return 500 '8013 server Internal Error.\n';
}

  测试

[root@python vhast]# curl  rrups.com/error
8013 server Internal Error.
[root@python vhast]# curl rrups.com/error
8011 server response.
[root@python vhast]# curl rrups.com/error
8013 server Internal Error.
[root@python vhast]# curl rrups.com/error
8011 server response.

  配置

	location /httperr {

		proxy_next_upstream http_500;
proxy_pass http://ps;
}
[root@python vhast]# cat shangyou.conf
server {
listen 8011;
default_type text/plain;
return 200 '8011 server response.\n';
} server {
listen 8012;
default_type text/plain;
root html;
location /{
add_header X-Accel-Limit-Rate 10; }
location /test { return 200 '8012 server response.
uri: $uri
method: $request_method
requset: $request
http_name: $http_name
\n';
}
} server {
listen 8013;
default_type text/plain;
return 500 '8013 server Internal Error.\n';
}

  测试

[root@python vhast]# curl  rrups.com/httperr
8011 server response.
[root@python vhast]# curl rrups.com/httperr
8011 server response.
[root@python vhast]# curl rrups.com/httperr
8011 server response.
[root@python vhast]# curl rrups.com/httperr
8011 server response.
[root@python vhast]# curl rrups.com/httperr
8011 server response.
[root@python vhast]# curl rrups.com/httperr
8011 server response.

  修改上游服务器响应码

[root@python vhast]# cat shangyou.conf
server {
listen 8011;
default_type text/plain;
return 200 '8011 server response.\n';
} server {
listen 8012;
default_type text/plain;
root html;
location /{
add_header X-Accel-Limit-Rate 10; }
location /test { return 200 '8012 server response.
uri: $uri
method: $request_method
requset: $request
http_name: $http_name
\n';
}
} server {
listen 8013;
default_type text/plain;
return 200 '8013 server Internal Error.\n';
}

  测试

[root@python vhast]# curl  rrups.com/httperr
8011 server response.
[root@python vhast]# curl rrups.com/httperr
8013 server Internal Error.
[root@python vhast]# curl rrups.com/httperr
8011 server response.
[root@python vhast]# curl rrups.com/httperr
8013 server Internal Error.

  配置

server {
listen 8013;
default_type text/plain;
return 500 '8013 server Internal Error.\n';
} [root@python vhast]# cat proxy_next.conf upstream ps{
#ip_hash;
#hash user_$arg_username;
server 127.0.0.1:8011;
server 127.0.0.1:8013;
#keepalive 32;
}
server {
#set_real_ip_from 192.168.183.4;
#real_ip_recursive on;
#real_ip_header X-Forwarded-For;
server_name rrups.com;
access_log logs/upstream.log main;
error_log rrups_error.log info;
location /{
#proxy_pass http://rrups/addurl;
proxy_pass http://ps;
#proxy_hide_header aaa;
#proxy_method POST;
#proxy_pass_request_headers off;
#proxy_pass_request_body off;
#proxy_set_body 'hello world';
#proxy_set_header name '';
#proxy_http_version 1.1;
#proxy_set_header Connection "";
} location /test { } location /error {
proxy_pass http://ps;
proxy_connect_timeout 1s;
#proxy_next_upstream error;
}
location /intercept{
proxy_intercept_errors off;
proxy_pass http://127.0.0.1:8013;
proxy_next_upstream error;
}
location /httperr { proxy_next_upstream http_500;
proxy_pass http://ps;
}
}

  测试

[root@python vhast]# curl  rrups.com/intercept -I
HTTP/1.1 500 Internal Server Error
Server: nginx/1.15.9
Date: Wed, 17 Jul 2019 08:10:13 GMT
Content-Type: text/plain
Content-Length: 28
Connection: keep-alive

  配置

[root@python vhast]# cat shangyou.conf
server {
listen 8011;
default_type text/plain;
return 200 '8011 server response.\n';
} server {
listen 8012;
default_type text/plain;
root html;
location /{
add_header X-Accel-Limit-Rate 10; }
location /test { return 200 '8012 server response.
uri: $uri
method: $request_method
requset: $request
http_name: $http_name
\n';
}
} server {
listen 8013;
default_type text/plain;
return 500 '8013 server Internal Error.\n';
} upstream ps{
#ip_hash;
#hash user_$arg_username;
server 127.0.0.1:8011;
server 127.0.0.1:8013;
#keepalive 32;
}
location /error {
proxy_pass http://ps;
proxy_connect_timeout 1s;
#proxy_next_upstream error;
}
error_page 500 /a.txt; 定义上游服务器返回500,用a.txt文件内容返回
location /intercept{
proxy_intercept_errors on;
proxy_pass http://127.0.0.1:8013;
#proxy_next_upstream error;
}
location /httperr { proxy_next_upstream http_500;
proxy_pass http://ps;
}
}

  测试

[root@python vhast]# curl  rrups.com/intercept
qwertyuopuughgbbvvbaaa
[root@python vhast]# curl rrups.com/intercept -I
HTTP/1.1 500 Internal Server Error
Server: nginx/1.15.9
Date: Wed, 17 Jul 2019 08:23:49 GMT
Content-Type: text/plain
Content-Length: 23
Connection: close
ETag: "5d28942d-17"

 

 双向认证时的指令

  

对下游使用证书

Syntax: ssl_certificate file;
Default: —
Context: http, server Syntax: ssl_certificate_key file;
Default: —
Context: http, server

  验证下游证书

Syntax: ssl_verify_client on | off | optional | optional_no_ca;
Default: ssl_verify_client off;
Context: http, server Syntax: ssl_client_certificate file;
Default: —
Context: http, server

  对上游使用证书

Syntax: proxy_ssl_certificate file;
Default: —
Context: http, server, location Syntax: proxy_ssl_certificate_key file;
Default: —
Context: http, server, location

  验证上游的证书

Syntax: proxy_ssl_trusted_certificate file;
Default: —
Context: http, server, location Syntax: proxy_ssl_verify on | off;
Default: proxy_ssl_verify off;
Context: http, server, location

  ssl 模块提供的变量

安全套件

ssl_cipher:本次通讯选用的安全套件,例如ECDHE-RSA-AES128-GCM-SHA256

ssl_ciphers:客户端支持的所有安全套件

ssl_protocol:本次通信选用TLS版本,例如TLS1.2

ssl_curves : 客户端支持的椭圆曲线,例如secp384rl:secp521r1

证书

ssl_client_raw_cert:原始客户端证书内容

ssl_client_escaped_cert:返回客户端证书做urlencode 编码后的内容

ssl_client_cert : 对客户端证书每一行内容前加tab制表符,增强可读性

ssl_client_fingerprint:客户端证书的SHA1指纹

证书结构化信息

ssl_server_name: 通过TLS插件SNI获取到的服务域名

ssl_client_i_dn:依据RFC2253获取到证书issuer dn信息,例如:CN=...,O=....,L=....,C=....

ssl_client_i_dn_legacy: 依据RFC2253获取到证书issuer dn信息例如:/C=…/L=…/O=…/CN=…

ssl_client_s_dn: 依据RFC2253获取到证书issuer dn信息例如:CN=…,OU=…,O=…,L=…,ST=…,C=…

ssl_client_s_dn_legacy:同样获取issuer dn信息,格式为:/C=…/ST=…/L=…/O=…/OU=…/CN=…

证书有效期

ssl_client_v_end: 返回客户端证书的过期时间;例如Dec 1 11:56:11 2028 GMT

ssl_client_v_remain: 返回还有多少天客户端证书过期,例如针对上面的ssl_client_v_end其值为3649

ssl_client_v_start : 客户端证书颁发日期;例如 Dec 4 11:56:11 2018 GMT

连接有效性

ssl_client_serial:返回连接客户端证书的序列号,例如8BE947674841BD44

ssl_early_data: 在TLS1.3协议中使用了early data且握手未返回1,则返回空字符串

ssl_client_verify:如果验证失败为FAILED:原因,如果没有验证证书则为NONE,验证成功则为SUCCESS

ssl_session_id:已建立连接的sessionid

ssl_session_reused:如果session被复用(参考session)则为r,否则为.

创建证书操作

创建根证书

        创键CA私钥 

openssl genrsa -out ca.key 2048

  制作CA公钥

openssl req -new -x509 -days 3650 -key ca.key -out ca.crt

 签发证书

创建私钥

openssl genrsa -out a.pem 1024
openssl rsa -in a.pem -out a.key

    生成签发证书请求

openssl req -new -key a.pem -out a.csr

   使CA证书进行签发

openssl x509 -req -sha256 -in a.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650 -out a.crt

  验证签发证书是否正确

openssl verify -CAfile ca.crt a.crt

nginx 加工上游服务器返回的内容,并返回给客户端的更多相关文章

  1. Nginx 当上游服务器返回失败时的处理办法

    陶辉95课 Syntax: proxy_next_upstream error | timeout | invalid_header | http_500 | http_502 | http_503  ...

  2. Nginx 针对上游服务器缓存

    L:99 nginx缓存 : 定义存放缓存的载体 proxy_cache 指令 Syntax: proxy_cache zone | off; Default: proxy_cache off; Co ...

  3. 基于nginx实现上游服务器动态自动上下线——不需reload

    网上关于nginx的介绍有很多,这里讲述的是上游服务(如下图的Java1服务)在没有"网关"的情况下,如何通过nginx做到动态上下线. 传统的做法是,手动修改nginx的upst ...

  4. nginx 与上游服务器建立连接的相关设置

    向上游服务建立联系 Syntax: proxy_connect_timeout time; #设置TCP三次握手超时时间,默认60秒:默认超时后报502错误 Default: proxy_connec ...

  5. nginx配置图片服务器

    这几天研究了一下nginx配置图片服务器的相关内容,个人的一些收获与大家分享一下: Nginx是目前非常流行的web服务器,它起源于俄罗斯.它具有处理速度快,并发量大,占用资源极低等优点,尤其对于静态 ...

  6. Nginx 搭建图片服务器

    Nginx 搭建图片服务器 本章内容通过Nginx 和 FTP 搭建图片服务器.在学习本章内容前,请确保您的Linux 系统已经安装了Nginx和Vsftpd. Nginx 安装:http://www ...

  7. Nginx 接受上游缓存流程

    L:101 这个指令主要是由上游服务器来决定是否缓存 详见博客Nginx 针对上游服务器缓存

  8. Nginx 反向代理如何连接上游服务器

    L:92 想上游服务器先建立TCP连接 如三次握手 下面指令可以控制握手时间 proxy_next_upstream  指令当出现502可以换个上游服务器 Tcp keepalive 一般都是由进程在 ...

  9. Python/dotNET Redis服务连接客户端调用SET方法的同时获取Redis服务器返回的内容

    在用Python或dotNET redis客户端连接redis服务器的时候,当你调用客户端的SET方法后同时还想得到其返回的字符串,那么需要处理一下. 1. Redis Python redis客户端 ...

随机推荐

  1. Abaqus 载荷分类(部分)

    目录 1. 集中载荷 1.1 集中载荷施加方法 1.2 定义集中跟随力 1.3 指定文件定义集中节点力 2. 分布载荷 2.1 分布载荷分类 3. 热载荷 3.1 模拟热辐射 3.2 直接定义热流量 ...

  2. 【 Hibernate 】Hibernate的session更新和删除失败问题

    applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xm ...

  3. Day1 面向对象编程与Java核心类

    this变量 在方法内部,可以使用一个隐含的变量this,它始终指向当前实例.如果没有命名冲突,可以省略this. 但是,如果有局部变量和字段重名,那么局部变量优先级更高,就必须加上this. 构造方 ...

  4. python面向对象封装案例2

    封装 封装 是面向对象编程的一大特点 面向对象编程的 第一步 —— 将 属性 和 方法 封装 到一个抽象的 类 中 外界 使用 类 创建 对象,然后 让对象调用方法 对象方法的细节 都被 封装 在 类 ...

  5. Ubuntu安装MySQL密码初始化问题

    在Ubuntu上使用sudo apt-get install mysql-server mysql-common 命令安装MySQL以后,安装过程中没有提示输入密码.然后使用mysql -u root ...

  6. phpStudy的虚拟站点域名管理

    使用phpStudy在本地环境,使用虚拟域名访问本地站点. 步骤: 0x01  修改配置文件 打开站点域名管理 添加你本地站点的路径,第二域名可以不填,网站端口不填的话默认为80. 先点击新增,再点击 ...

  7. jQuery+PHP+Ajax动态数字统计展示实例

    jQuery+PHP+Ajax实现的一款动态数字统计展示实例,本例是在页面上动态展示了当前在线用户数,当然了,你可以应用到其他更多场景中. 首先我们在#number放置要统计的数字: <div ...

  8. Coursera-吴恩达机器学习课程笔记-Week1

    参考资料: 吴恩达教授机器学习课程 机器学习课程中文笔记 Week 1 一. 引言 机器学习模型可分为监督学习Superviese learning(每个数据集给出了正确的值)和无监督学习Unsupe ...

  9. C:函数 注意点

    形参 在定义函数时指定的形参,在未出现函数调用时,它们并不占内存中的存储单元,因此称它们是形式参数或虚拟参数,简称形参,表示它们并不是实际存在的数据,所以,形参里的变量不能赋值. C不像C++里一样可 ...

  10. Euler Sums系列(一)

    \[\Large\sum_{n=1}^{\infty} \frac{H_{n}}{2^nn^4}\] \(\Large\mathbf{Solution:}\) Let \[\mathcal{S}=\s ...