我有一个REST和WCF服务,并希望根据操作发送自定义状态代码.
某些验证失败然后我想发送HTTP 444的示例,当授权失败时,我想发送HTTP 455
问题是我们如何对SOAP和REST Web服务进行验证.
在客户端上,错误代码如何起作用,因为当您从WCF服务(使用SOAP)发送HTTP 400/500时,会在显示状态代码的客户端上抛出异常.
现在,如果我发送一个新的自定义状态代码,客户端如何处理这个?
在上周末,我注意到我的一个中型AWS实例出现问题,如果请求超过60秒,Nginx总是返回HTTP 499响应.请求的页面是PHP脚本
我花了几天时间试图找到答案,并尝试了我可以在互联网上找到的所有内容,包括Stack Overflow上的几个条目,没有任何效果.
我已经尝试修改PHP设置,PHP-FPM设置和Nginx设置.你可以在星期五看到我在NginX论坛上提出的一个问题(http://forum.nginx.org/read.php?9,237692)虽然没有得到任何答复所以我希望我能找到一个在我被迫回到Apache之前回答这个问题,我知道它正常工作.
这是不是同样的问题在其他项中报告的HTTP 500错误.
我已经能够使用PHP 5.4.11使用NginX的新的微型AWS实例来复制问题.
为了帮助那些希望看到问题的人,我将带你完成设置,我为最新的Micro测试服务器运行.
您需要使用AMI ami-c1aaabb5启动新的AWS Micro实例(因此它是免费的)
此PasteBin条目具有完整的设置,可以运行以镜像我的测试环境.您最后需要在NginX配置中更改example.com
一旦设置完毕,您只需要创建我正在测试的示例PHP文件
<?php
sleep(70);
die( 'Hello World' );
?>
Run Code Online (Sandbox Code Playgroud)
将其保存到webroot中然后进行测试.如果您使用php或php-cgi从命令行运行脚本,它将起作用.如果您通过网页访问脚本并拖动访问日志/var/log/nginx/example.access.log,您会注意到在60秒后收到HTTP 1.1 499响应.
现在您可以看到超时,我将完成我对PHP和NginX所做的一些配置更改以尝试解决此问题.对于PHP,我将创建几个配置文件,以便可以轻松禁用它们
更新PHP FPM配置以包含外部配置文件
sudo echo '
include=/usr/local/php/php-fpm.d/*.conf
' >> /usr/local/php/etc/php-fpm.conf
Run Code Online (Sandbox Code Playgroud)
创建一个新的PHP-FPM配置以覆盖请求超时
sudo echo '[www]
request_terminate_timeout = 120s
request_slowlog_timeout = 60s
slowlog = /var/log/php-fpm-slow.log ' >
/usr/local/php/php-fpm.d/timeouts.conf
Run Code Online (Sandbox Code Playgroud)
更改一些全局设置以确保紧急重启间隔为2分钟
# Create a global tweaks
sudo echo '[global]
error_log = /var/log/php-fpm.log
emergency_restart_threshold = 10
emergency_restart_interval = 2m
process_control_timeout …
Run Code Online (Sandbox Code Playgroud) 我对NGINX有一个非常奇怪的问题.
我有以下upstream.conf
文件,上面有以下内容:
upstream files_1 {
least_conn;
check interval=5000 rise=3 fall=3 timeout=120 type=ssl_hello;
server mymachine:6006 ;
}
Run Code Online (Sandbox Code Playgroud)
在locations.conf中:
location ~ "^/files(?<command>.+)/[0123]" {
rewrite ^ $command break;
proxy_pass https://files_1 ;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
Run Code Online (Sandbox Code Playgroud)
在/ etc/hosts中:
127.0.0.1 localhost mymachine
Run Code Online (Sandbox Code Playgroud)
当我这样做时wget https://mynachine:6006/alive --no-check-certificate
,我明白了HTTP request sent, awaiting response... 200 OK
.我还验证了端口6006正在使用netstat进行监听,并且可以.
但是当我向NGINX文件服务器发送请求时,我收到以下错误:
连接上游时没有上游,客户端:..,请求:"POST/files/save/2 HTTP/1.1,上游:" https:// files_1/save "
但上游还可以.问题是什么?
目前,我正在基于tomcat上运行的grails 3的系统上使用JMeter运行负载测试。每秒发送20k请求后,nginx错误日志中显示“连接上游客户端时没有上游上游”。我们的应用程序是基于多租户的,因此我需要执行高负载。这是我的nginx配置。
worker_processes 16;
worker_rlimit_nofile 262144;
error_log /var/log/nginx/error.log;
events {
worker_connections 24576;
use epoll;
multi_accept on;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 600;
keepalive_requests 100000;
access_log off;
server_names_hash_max_size 4096;
underscores_in_headers on;
client_max_body_size 8192m;
log_format vhost '$remote_addr - $remote_user [$time_local] $status "$request" $body_bytes_sent "$http_referer" "$http_user_agent" "http_x_forwarded_for"';
proxy_connect_timeout 120;
proxy_send_timeout 120;
proxy_read_timeout 120;
gzip on;
gzip_types text/plain application/xml text/css text/js text/xml application/x-javascript text/javascript application/json application/xml+rss image application/javascript;
gzip_min_length 1000;
gzip_static on;
gzip_vary on;
gzip_buffers 16 8k;
gzip_comp_level 6; …
Run Code Online (Sandbox Code Playgroud) 我的设置:
卷曲 - > AWS ELB - > Nginx - > NodeJS
当请求数量高时,我面临这个问题.
Nginx访问日志
xx.xx.xx.xx - - [30/Oct/2014:13:23:40 +0000] "POST /some/calls/object HTTP/1.1" 499 0 "-" "curl/7.27.0"
xx.xx.xx.xx - - [30/Oct/2014:13:23:40 +0000] "POST /some/calls/object HTTP/1.1" 499 0 "-" "curl/7.27.0"
Run Code Online (Sandbox Code Playgroud)
Nginx错误日志
2014/10/30 13:23:40 [info] 11181#0: *17811 client xx.xx.xx.xx closed keepalive connection
2014/10/30 13:23:40 [info] 11181#0: *17631 epoll_wait() reported that client prematurely closed connection, so upstream connection is closed too while sending request to upstream, client: xx.xx.xx.xx, server: example.com, request: "POST /some/calls/objects HTTP/1.1", …
Run Code Online (Sandbox Code Playgroud)