Compare commits

...

26 Commits

Author SHA1 Message Date
Jeffrey Crowell 79f98b197e release version 1.9.32.10 -> 1.9.32.11 2015-12-10 10:05:43 -05:00
Jeffrey Crowell 4103004cee update config for 1.9.32.10 2015-10-08 17:26:44 -04:00
Jeff Kaufman 0f3f268b36 Revert "Revert "Handle DoneAndSetHeaders() new second argument that wants to know whether the response is complete.""
Needed for 1.9.32.6 to build.

This reverts commit 19ebf69bad.
2015-07-30 07:27:19 -04:00
Jeffrey Crowell 30fdd02d0c Merge pull request #999 from pagespeed/release-1.9.32.6-beta
release: version 1.9.32.4 -> 1.9.32.6
2015-07-29 16:07:45 -04:00
Jeffrey Crowell 0572a5bebf release: version 1.9.32.4 -> 1.9.32.6 2015-07-29 14:33:57 -04:00
Jeff Kaufman 4bd5b7c663 Merge pull request #997 from pagespeed/jefftk-backport-864-fix
backport #864 fix for bugfix release
2015-07-28 13:26:45 -04:00
Otto van der Schaaf a9c292d8dc server-header: improve handling of server header
- Fixes an issue in the html flow that would prevent overriding the
value of the 'Server' response-header.
- Add tests that ensure we emit a single and correct server header
in all flows when not overriding it.
- Add tests that ensure overriding the 'Server' response header
works. The resource and IPRO flow are added to the expected failures
as those are not working yet (and will be adressed in a follow-up).

Fixed https://github.com/pagespeed/ngx_pagespeed/issues/864 (html flow)
2015-07-28 11:32:55 -04:00
Jeffrey Crowell 907c57a217 add test servers for sending x-sendfile and x-accel-redirect 2015-07-23 17:36:54 -04:00
Jan-Willem Maessen a7bef40eac Fix pagespeed_libraries_generator.sh to fetch pagespeed_libraries.conf from github rather than svn. 2015-07-09 10:19:37 -04:00
Jeffrey Crowell af5c568a92 Merge remote-tracking branch 'origin/release-1.9.32.4-beta' 2015-06-17 14:15:19 -04:00
Jeffrey Crowell 5cc1ffb352 release: version 1.9.32.3 -> 1.9.32.4 2015-06-17 14:08:47 -04:00
Jeffrey Crowell a578057e2f fix tab/space. 2015-06-10 13:01:26 -04:00
Jeffrey Crowell 5bd43dce9a fix backport of fix for #965
was missing
ctx->base_fetch->SetRequestHeadersTakingOwnership(request_headers).
2015-06-10 11:44:46 -04:00
Jeffrey Crowell 19ebf69bad Revert "Handle DoneAndSetHeaders() new second argument that wants to know whether the response is complete."
This reverts commit 4df7460d62.
2015-06-10 11:33:05 -04:00
Jeff Kaufman 4df7460d62 Handle DoneAndSetHeaders() new second argument that wants to know whether the response is complete. 2015-05-15 11:30:04 -04:00
Jeffrey Crowell c5c443f256 add psol tar.gz to gitignore 2015-05-13 11:56:56 -04:00
Jeffrey Crowell b9ca5d865d backport @oschaff fix of #965
fix issue of PageSpeed silently crashing returning partial web pages

backported from commit a5411a1c7c
2015-05-13 11:48:43 -04:00
Jeffrey Crowell 0cf3f1c6d7 Merge pull request #951 from pagespeed/crowell-build_clang
initialize uninitialized variables.
2015-04-01 15:44:56 -04:00
Jeffrey Crowell 7857bab7fb Merge pull request #949 from pagespeed/crowell-with_threads
add support for nginx 1.7.11 --with-threads
2015-04-01 15:09:49 -04:00
Jeffrey Crowell b11ab687c1 initialize uninitialized variables. 2015-04-01 14:49:31 -04:00
Jeffrey Crowell a81cc997a9 add support for nginx 1.7.11 --with-threads 2015-04-01 14:11:00 -04:00
Otto van der Schaaf 4c9298446c Merge pull request #916 from pagespeed/oschaaf-date-header-32-bits-issue
date-header: fix 32 bits issue
2015-02-17 15:25:37 +01:00
Otto van der Schaaf 7355f2e207 date-header: fix 32 bits issue
Should fix https://github.com/pagespeed/ngx_pagespeed/issues/913
2015-02-16 23:42:54 +01:00
Jeffrey Crowell 9da85bb9d5 Replace CHECK with return failure and log.
Fixes #888 along with
https://code.google.com/p/modpagespeed/source/detail?r=4533
2015-01-30 10:29:05 -05:00
Otto van der Schaaf 90ac91fe9e Merge pull request #816 from pagespeed/oschaaf-gzip-vs-etag
gzip-vs-etag: Don't rename the ETag when gzip isn't ./configured
2015-01-08 18:00:42 +01:00
Otto van der Schaaf b037cc2b3e gzip-vs-etag: Don't rename the ETag when gzip isn't ./configured
We should not rename the ETag header to work around the gzip module
clearing it, when the gzip module actually isn't built. In that case
we will fail to inject the header filter that renames the header back
to 'ETag' before it gets send out.

Fixes https://github.com/pagespeed/ngx_pagespeed/issues/770
2014-11-14 10:42:49 +01:00
9 changed files with 137 additions and 40 deletions
+1 -1
View File
@@ -1,4 +1,4 @@
test/tmp
psol/
psol-*.tar.gz
*.*.*.*.tar.gz
+2 -2
View File
@@ -27,8 +27,8 @@ if [ "$mod_pagespeed_dir" = "unset" ] ; then
echo " You need to separately download the pagespeed library:"
echo ""
echo " $ cd /path/to/ngx_pagespeed"
echo " $ wget https://dl.google.com/dl/page-speed/psol/1.9.32.4.tar.gz"
echo " $ tar -xzvf 1.9.32.4.tar.gz # expands to psol/"
echo " $ wget https://dl.google.com/dl/page-speed/psol/1.9.32.11.tar.gz"
echo " $ tar -xzvf 1.9.32.11.tar.gz # expands to psol/"
echo ""
echo " Or see the installation instructions:"
echo " https://github.com/pagespeed/ngx_pagespeed#how-to-build"
+2 -2
View File
@@ -13,9 +13,9 @@
# Author: vid@zippykid.com (Vid Luther)
# jefftk@google.com (Jeff Kaufman)
URL="https://modpagespeed.googlecode.com/svn/trunk/src/"
URL="https://github.com/pagespeed/mod_pagespeed/raw/master/"
URL+="net/instaweb/genfiles/conf/pagespeed_libraries.conf"
curl -s "$URL" \
curl -L -s -S "$URL" \
| grep ModPagespeedLibrary \
| while read library size hash url ; do
echo " pagespeed Library $size $hash $url;"
+4
View File
@@ -18,6 +18,10 @@
#define NGX_MESSAGE_HANDLER_H_
extern "C" {
#include <ngx_auto_config.h>
#if (NGX_THREADS)
#include <ngx_thread.h>
#endif
#include <ngx_core.h>
#include <ngx_log.h>
}
+40 -34
View File
@@ -295,7 +295,8 @@ void copy_response_headers_from_ngx(const ngx_http_request_t* r,
// When we don't have a date header, set one with the current time.
if (headers->Lookup1(HttpAttributes::kDate) == NULL) {
headers->SetDate(ngx_current_msec);
PosixTimer timer;
headers->SetDate(timer.NowMs());
}
// TODO(oschaaf): ComputeCaching should be called in setupforhtml()?
@@ -342,10 +343,17 @@ ngx_int_t copy_response_headers_to_ngx(
ngx_str_t name, value;
// If the gzip module is not configured, we must not rename the header,
// because we will fail to inject the header filter that will rename the
// header back.
bool gzip_enabled = false;
#if (NGX_HTTP_GZIP)
gzip_enabled = true;
#endif
// To prevent the gzip module from clearing weak etags, we output them
// using a different name here. The etag header filter module runs behind
// the gzip compressors header filter, and will rename it to 'ETag'
if (StringCaseEqual(name_gs, "etag")
if (gzip_enabled && StringCaseEqual(name_gs, "etag")
&& StringCaseStartsWith(value_gs, "W/")) {
name.len = strlen(kInternalEtagName);
name.data = reinterpret_cast<u_char*>(
@@ -354,6 +362,7 @@ ngx_int_t copy_response_headers_to_ngx(
name.len = name_gs.length();
name.data = reinterpret_cast<u_char*>(const_cast<char*>(name_gs.data()));
}
value.len = value_gs.length();
value.data = reinterpret_cast<u_char*>(const_cast<char*>(value_gs.data()));
@@ -401,8 +410,6 @@ ngx_int_t copy_response_headers_to_ngx(
continue;
} else if (STR_EQ_LITERAL(name, "Transfer-Encoding")) {
continue;
} else if (STR_EQ_LITERAL(name, "Server")) {
continue;
}
u_char* name_s = ngx_pstrdup(r->pool, &name);
@@ -1630,7 +1637,8 @@ void ps_release_base_fetch(ps_request_ctx_t* ctx) {
// TODO(chaizhenhua): merge into NgxBaseFetch ctor
ngx_int_t ps_create_base_fetch(ps_request_ctx_t* ctx,
RequestContextPtr request_context) {
RequestContextPtr request_context,
RequestHeaders* request_headers) {
ngx_http_request_t* r = ctx->r;
ps_srv_conf_t* cfg_s = ps_get_srv_config(r);
int file_descriptors[2];
@@ -1673,6 +1681,7 @@ ngx_int_t ps_create_base_fetch(ps_request_ctx_t* ctx,
ctx->base_fetch = new NgxBaseFetch(
r, file_descriptors[1], cfg_s->server_context,
request_context, ctx->preserve_caching_headers);
ctx->base_fetch->SetRequestHeadersTakingOwnership(request_headers);
return NGX_OK;
}
@@ -1700,8 +1709,8 @@ void ps_release_request_context(void* data) {
}
if (ctx->recorder != NULL) {
ctx->recorder->Fail();
ctx->recorder->DoneAndSetHeaders(NULL); // Deletes recorder.
// Deletes recorder.
ctx->recorder->DoneAndSetHeaders(NULL, false /* incomplete response */);
ctx->recorder = NULL;
}
@@ -1808,7 +1817,10 @@ ngx_int_t ps_resource_handler(ngx_http_request_t* r,
GoogleString url_string = ps_determine_url(r);
GoogleUrl url(url_string);
CHECK(url.IsWebValid());
if (!url.IsWebValid()) {
ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, "invalid url");
return NGX_DECLINED;
}
scoped_ptr<RequestHeaders> request_headers(new RequestHeaders);
scoped_ptr<ResponseHeaders> response_headers(new ResponseHeaders);
@@ -1923,35 +1935,17 @@ ngx_int_t ps_resource_handler(ngx_http_request_t* r,
ngx_http_set_ctx(r, ctx, ngx_pagespeed);
}
if (ps_create_base_fetch(ctx, request_context) != NGX_OK) {
// Do not need to release request context 'ctx'.
// http_pool_cleanup will call ps_release_request_context
return NGX_ERROR;
}
ctx->base_fetch->SetRequestHeadersTakingOwnership(request_headers.release());
bool page_callback_added = false;
scoped_ptr<ProxyFetchPropertyCallbackCollector>
property_callback(
ProxyFetchFactory::InitiatePropertyCacheLookup(
!html_rewrite /* is_resource_fetch */,
url,
cfg_s->server_context,
options,
ctx->base_fetch,
false /* requires_blink_cohort (no longer unused) */,
&page_callback_added));
if (pagespeed_resource) {
// TODO(jefftk): Set using_spdy appropriately. See
// ProxyInterface::ProxyRequestCallback
ps_create_base_fetch(ctx, request_context, request_headers.release());
ResourceFetch::Start(
url,
custom_options.release() /* null if there aren't custom options */,
false /* using_spdy */, cfg_s->server_context, ctx->base_fetch);
return ps_async_wait_response(r);
} else if (is_an_admin_handler) {
ps_create_base_fetch(ctx, request_context, request_headers.release());
QueryParams query_params;
query_params.ParseFromUrl(url);
@@ -1995,6 +1989,7 @@ ngx_int_t ps_resource_handler(ngx_http_request_t* r,
}
if (html_rewrite) {
ps_create_base_fetch(ctx, request_context, request_headers.release());
// Do not store driver in request_context, it's not safe.
RewriteDriver* driver;
@@ -2021,12 +2016,22 @@ ngx_int_t ps_resource_handler(ngx_http_request_t* r,
driver->set_pagespeed_option_cookies(pagespeed_option_cookies);
// TODO(jefftk): FlushEarlyFlow would go here.
bool page_callback_added = false;
ProxyFetchPropertyCallbackCollector* property_callback =
ProxyFetchFactory::InitiatePropertyCacheLookup(
!html_rewrite /* is_resource_fetch */,
url,
cfg_s->server_context,
options,
ctx->base_fetch,
false /* requires_blink_cohort (no longer unused) */,
&page_callback_added);
// Will call StartParse etc. The rewrite driver will take care of deleting
// itself if necessary.
ctx->proxy_fetch = cfg_s->proxy_fetch_factory->CreateNewProxyFetch(
url_string, ctx->base_fetch, driver,
property_callback.release(),
property_callback,
NULL /* original_content_fetch */);
return NGX_OK;
}
@@ -2034,6 +2039,7 @@ ngx_int_t ps_resource_handler(ngx_http_request_t* r,
if (options->in_place_rewriting_enabled() &&
options->enabled() &&
options->IsAllowed(url.Spec())) {
ps_create_base_fetch(ctx, request_context, request_headers.release());
// Do not store driver in request_context, it's not safe.
RewriteDriver* driver;
if (custom_options.get() == NULL) {
@@ -2073,8 +2079,7 @@ ngx_int_t ps_resource_handler(ngx_http_request_t* r,
"Passing on content handling for non-pagespeed resource '%s'",
url_string.c_str());
ctx->base_fetch->Done(false);
ps_release_base_fetch(ctx);
CHECK(ctx->base_fetch == NULL);
// set html_rewrite flag.
ctx->html_rewrite = true;
return NGX_DECLINED;
@@ -2279,14 +2284,13 @@ ngx_int_t ps_html_rewrite_header_filter(ngx_http_request_t* r) {
if (!ps_has_stacked_content_encoding(r)) {
StringPiece content_encoding =
str_to_string_piece(r->headers_out.content_encoding->value);
GzipInflater::InflateType inflate_type;
GzipInflater::InflateType inflate_type = GzipInflater::kGzip;
bool is_encoded = false;
if (StringCaseEqual(content_encoding, "deflate")) {
is_encoded = true;
inflate_type = GzipInflater::kDeflate;
} else if (StringCaseEqual(content_encoding, "gzip")) {
is_encoded = true;
inflate_type = GzipInflater::kGzip;
}
if (is_encoded) {
@@ -2502,7 +2506,9 @@ ngx_int_t ps_in_place_body_filter(ngx_http_request_t* r, ngx_chain_t* in) {
if (cl->buf->last_buf || recorder->failed()) {
ResponseHeaders response_headers;
copy_response_headers_from_ngx(r, &response_headers);
ctx->recorder->DoneAndSetHeaders(&response_headers);
ctx->recorder->DoneAndSetHeaders(
&response_headers,
cl->buf->last_buf /* response is complete if last_buf is set */);
ctx->recorder = NULL;
break;
}
+4
View File
@@ -20,6 +20,10 @@
#define NGX_REWRITE_DRIVER_FACTORY_H_
extern "C" {
#include <ngx_auto_config.h>
#if (NGX_THREADS)
#include <ngx_thread.h>
#endif
#include <ngx_core.h>
#include <ngx_http.h>
#include <ngx_config.h>
+1 -1
View File
@@ -48,7 +48,7 @@ SystemRequestContext* NgxServerContext::NewRequestContext(
ngx_http_request_t* r) {
// Based on ngx_http_variable_server_port.
bool port_set = false;
int local_port;
int local_port = 0;
#if (NGX_HAVE_INET6)
if (r->connection->local_sockaddr->sa_family == AF_INET6) {
local_port = ntohs(reinterpret_cast<struct sockaddr_in6*>(
+42
View File
@@ -269,6 +269,8 @@ PSA_JS_LIBRARY_URL_PREFIX="pagespeed_custom_static"
# An expected failure can be indicated like: "~In-place resource optimization~"
PAGESPEED_EXPECTED_FAILURES="
~Override server header in resource flow.~
~Override server header in IPRO flow.~
"
# Some tests are flakey under valgrind. For now, add them to the expected failures
@@ -2748,6 +2750,46 @@ start_test Base config has purging disabled. Check error message syntax.
OUT=$($WGET_DUMP "$HOSTNAME/pagespeed_admin/cache?purge=*")
check_from "$OUT" fgrep -q "pagespeed EnableCachePurge on;"
start_test Default server header in html flow.
URL=http://headers.example.com/mod_pagespeed_example/
OUT=$(http_proxy=$SECONDARY_HOSTNAME $WGET_DUMP -O /dev/null -S $URL 2>&1)
# '|| true' in the line below supresses the exit code from grep when there is no
# match in its input (1).
MATCHES=$(echo "$OUT" | grep -c "Server: nginx/") || true
check [ $MATCHES -eq 1 ]
start_test Default server header in resource flow.
URL=http://headers.example.com/mod_pagespeed_example/
URL+=combine_javascript2.js+combine_javascript1.js.pagespeed.jc.0.js
OUT=$(http_proxy=$SECONDARY_HOSTNAME $WGET_DUMP -O /dev/null -S $URL 2>&1)
MATCHES=$(echo "$OUT" | grep -c "Server: nginx/") || true
check [ $MATCHES -eq 1 ]
start_test Default server header in IPRO flow.
URL=http://headers.example.com//mod_pagespeed_example/combine_javascript2.js
OUT=$(http_proxy=$SECONDARY_HOSTNAME $WGET_DUMP -O /dev/null -S $URL 2>&1)
MATCHES=$(echo "$OUT" | grep -c "Server: nginx/") || true
check [ $MATCHES -eq 1 ]
start_test Override server header in html flow.
URL=http://headers.example.com/mod_pagespeed_test/whitespace.html
OUT=$(http_proxy=$SECONDARY_HOSTNAME $WGET_DUMP -O /dev/null -S $URL 2>&1)
MATCHES=$(echo "$OUT" | grep -c "Server: override") || true
check [ $MATCHES -eq 1 ]
start_test Override server header in resource flow.
URL=http://headers.example.com/mod_pagespeed_test/
URL+=A.proxy_pass.css.pagespeed.cf.0.css
OUT=$(http_proxy=$SECONDARY_HOSTNAME $WGET_DUMP -O /dev/null -S $URL 2>&1)
MATCHES=$(echo "$OUT" | grep -c "Server: override") || true
check [ $MATCHES -eq 1 ]
start_test Override server header in IPRO flow.
URL=http://headers.example.com/mod_pagespeed_test/proxy_pass.css
OUT=$(http_proxy=$SECONDARY_HOSTNAME $WGET_DUMP -O /dev/null -S $URL 2>&1)
MATCHES=$(echo "$OUT" | grep -c "Server: override") || true
check [ $MATCHES -eq 1 ]
if $USE_VALGRIND; then
# It is possible that there are still ProxyFetches outstanding
# at this point in time. Give them a few extra seconds to allow
+41
View File
@@ -1044,6 +1044,31 @@ http {
pagespeed DisableFilters remove_comments,add_instrumentation;
}
# Test that pagespeed is disabled when sendfile headers are present.
server {
listen @@SECONDARY_PORT@@;
listen [::]:@@SECONDARY_PORT@@;
server_name uses-sendfile.example.com;
pagespeed FileCachePath "@@SECONDARY_CACHE@@";
pagespeed EnableFilters inline_javascript,rewrite_javascript;
add_header 'X-Sendfile' 'blablabla';
}
server {
listen @@SECONDARY_PORT@@;
listen [::]:@@SECONDARY_PORT@@;
server_name doesnt-sendfile.example.com;
pagespeed FileCachePath "@@SECONDARY_CACHE@@";
pagespeed EnableFilters inline_javascript,rewrite_javascript;
}
server {
listen @@SECONDARY_PORT@@;
listen [::]:@@SECONDARY_PORT@@;
server_name uses-xaccelredirect.example.com;
pagespeed FileCachePath "@@SECONDARY_CACHE@@";
pagespeed EnableFilters inline_javascript,rewrite_javascript;
add_header 'X-Accel-Redirect' 'blablabla';
}
# Proxy + IPRO a gzip'd file for testing Issue 896.
server {
listen @@SECONDARY_PORT@@;
@@ -1152,6 +1177,22 @@ http {
pagespeed EnableFilters rewrite_css;
}
server {
listen @@SECONDARY_PORT@@;
listen [::]:@@SECONDARY_PORT@@;
server_name headers.example.com;
root "@@SERVER_ROOT@@";
pagespeed FileCachePath "@@FILE_CACHE@@_purge";
pagespeed RewriteLevel CoreFilters;
pagespeed InPlaceRewriteDeadlineMs -1;
pagespeed LoadFromFile "http://headers.example.com/"
"@@SERVER_ROOT@@/";
location /mod_pagespeed_test/ {
more_set_headers "Server: overriden";
}
}
server {
listen @@PRIMARY_PORT@@;
listen [::]:@@PRIMARY_PORT@@;