Ich bin über ein Dutzend Mobile App APIs von Apache zu Nginx und ich habe eine harte Zeit bekommen die APIs richtig funktionieren. Ich hatte Probleme, die Auth-Header für ein paar Tage durchzulassen (see here), aber ich schaffte es endlich, dass das funktionierte. Wenn ich nun versuche, eine Anfrage mit dem Inhaltstyp application/json
zu stellen, ist $_REQUEST
leer. Seltsamerweise, wenn ich den Inhaltstyp auf application/x-www-form-urlencoded
ändere, ist der $_REQUEST
wie erwartet vorhanden.Nginx, fastcgi PHP Anfrage Körper leer, wenn Content-Type-Anwendung/JSON
Jetzt weiß ich, die einfache Antwort wäre, die mobilen Apps zu ändern, um diesen Inhaltstyp zu verwenden, aber das ist wegen der Menge der Anwendungen, die wir haben, nicht machbar. Nicht zu vergessen, es gibt keine Garantie, dass die Benutzer ihre App usw. aktualisieren werden.
Irgendwelche Ideen, wie ich das lösen kann? Hier ist meine Nginx conf Dateien:
Hier ist mein Haupt nginx.conf http Block:
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 6000;
client_max_body_size 128M;
gzip on;
gzip_comp_level 5;
gzip_min_length 256;
gzip_proxied any;
gzip_vary on;
gzip_types
application/atom+xml
application/javascript
application/json
application/rss+xml
application/vnd.ms-fontobject
application/x-font-ttf
application/x-web-app-manifest+json
application/xhtml+xml
application/xml
font/opentype
image/svg+xml
image/x-icon
text/css
text/plain
text/x-component;
include /Users/webdev2/.valet/Nginx/*;
include servers/*;
include valet/valet.conf;
}
Und hier meine valet.conf ist:
server {
listen 80 default_server;
root /;
charset utf-8;
location /41c270e4-5535-4daa-b23e-c269744c2f45/ {
internal;
alias /;
try_files $uri $uri/;
}
location/{
rewrite^/Users/webdev2/.composer/vendor/laravel/valet/server.php last;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
access_log off;
error_log /Users/webdev2/.valet/Log/nginx-error.log;
error_page 404 /Users/webdev2/.composer/vendor/laravel/valet/server.php;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/Users/webdev2/.valet/valet.sock;
fastcgi_pass_request_headers on;
fastcgi_pass_header Authorization;
fastcgi_pass_header http_oauth_token;
fastcgi_pass_header oauth_token_secret;
fastcgi_index /Users/webdev2/.composer/vendor/laravel/valet/server.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /Users/webdev2/.composer/vendor/laravel/valet/server.php;
fastcgi_read_timeout 300;
}
location ~ /\.ht {
deny all;
}
}
Und schließlich ist hier mein fastcgi_params Datei:
Es gibt nichts Überraschendes daran - PHP füllt einfach $ _POST/$ _ REQUEST nicht mit Daten, die als JSON gesendet werden. Sie müssen es lesen von 'php: // input' – CBroe
@CBroe Sie. Sind. Genial. Sie haben mir auf eine so große Weise geholfen und ich schätze es sehr. Willst du die Antwort machen, damit ich sie markieren kann? – dericcain