
Entonces, he estado tratando de resolver esto durante las últimas 8 horas, pero parece que estoy estancado...
Tengo el siguiente archivo de configuración de Nginx:
server_tokens off;
upstream php-handler {
server unix:/var/run/php5-fpm.sock;
}
server {
listen 80;
server_name domain.net;
access_log /var/log/nginx/domain.net-access.log;
error_log /var/log/nginx/domain.net-error.log;
location ~* \.(jpg|jpeg|gif|png|js|css|ico|eot|woff|ttf|svg|cur|htc|xml|html|tgz)$ {
expires 24h;
}
root /var/www/html/domain.net;
index index.php;
location ~ ^/cars/sale(.*) {
add_header X-Robots-Tag "noindex, nofollow" always;
try_files $uri $uri/ /index.php;
}
location ~ ^/(?:\.htaccess|config){
deny all;
}
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.php(?:$|/) {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php-handler;
fastcgi_read_timeout 120s;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_ignore_client_abort on;
fastcgi_param SERVER_NAME $http_host;
}
}
El problema es que la etiqueta X-Robots-Tag de la ubicación "/cars/sale" no se agrega, sin importar lo que intenté. Supongo que esto se debe a que la solicitud se pasa a la ubicación final ".php" donde se olvida cualquier encabezado agregado previamente. ¿Hay alguna forma de agregar este encabezado solo para esa ubicación específica sin usar more_set_headers?
Respuesta1
De hecho, puedes hacer esto:
map $request_uri $robot_header {
default "";
~^/cars/sale(.*) "noindex, nofollow";
~^/bikes/sale(.*) "noindex, nofollow";
~^/motorbikes/sale(.*) "noindex, nofollow";
}
Pero si todos siguen este patrón, entonces podrías hacer esto:
map $request_uri $robot_header {
default "";
~^/(.+?)/sale(.*) "noindex, nofollow";
}
Tu configuración es bastante desordenada. Cuando utilice expresiones regulares, Nginx seleccionará el primer bloque que coincida para atender su solicitud, por lo que el orden en que los enumere es importante.
Puede anidar otro bloque php dentro del bloque de ubicación de su automóvil y agregar el encabezado allí. Si especifica el controlador php como servidor ascendente, entonces no tendrá que incluir todos los parámetros fastcgi cada vez, lo que mantiene las cosas más ordenadas.
Respuesta2
Entonces... He pensado en una solución después de una buena noche de sueño. Es una solución muy sucia, pero es literalmente lo único que funciona en mi caso particular:
En el bloque http estoy agregando:
map $request_uri $robot_header1 {
default "";
~^/cars/sale(.*) "noindex, nofollow";
}
map $request_uri $robot_header2 {
default "";
~^/bikes/sale(.*) "noindex, nofollow";
}
map $request_uri $robot_header3 {
default "";
~^/motorbikes/sale(.*) "noindex, nofollow";
}
(Estos son solo tres como ejemplo, pero en realidad he generado ~200 de estos dentro de un archivo que incluyo en el bloque http)
Y en el bloque del servidor agregué:
add_header X-Robots-Tag $robot_header1;
add_header X-Robots-Tag $robot_header2;
add_header X-Robots-Tag $robot_header3;
...
También tuve que aumentar el parámetro de Nginx "variables_hash_bucket_size" a 512, porque el valor predeterminado de 64 no es suficiente para tantas variables como necesitaba. Así que espero que esto también ayude a alguien más...