merge commit
This commit is contained in:
@@ -72,8 +72,6 @@ In your `nginx.conf`, add to the main or server block:
|
||||
|
||||
```nginx
|
||||
pagespeed on;
|
||||
|
||||
# needs to exist and be writable by nginx
|
||||
pagespeed FileCachePath /var/ngx_pagespeed_cache;
|
||||
```
|
||||
|
||||
@@ -115,3 +113,20 @@ the progress of the project:
|
||||
list](https://groups.google.com/forum/#!forum/ngx-pagespeed-discuss)
|
||||
- [ngx-pagespeed-announce mailing
|
||||
list](https://groups.google.com/forum/#!forum/ngx-pagespeed-announce)
|
||||
|
||||
Note: The
|
||||
[canonicalize_javascript_libraries](https://developers.google.com/speed/pagespeed/module/filter-canonicalize-js)
|
||||
depends on `pagespeed_libraries.conf` which is distributed in Apache's format.
|
||||
To convert it to the Nginx format, run:
|
||||
|
||||
```bash
|
||||
$ scripts/pagespeed_libraries_generator.sh > ~/pagespeed_libraries.conf
|
||||
$ sudo mv ~/pagespeed_libraries.conf /etc/nginx/
|
||||
```
|
||||
|
||||
And then include it in your Nginx configuration by reference:
|
||||
|
||||
```nginx
|
||||
include pagespeed_libraries.conf;
|
||||
pagespeed EnableFilters canonicalize_javascript_libraries;
|
||||
```
|
||||
|
||||
Executable
+22
@@ -0,0 +1,22 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Converts pagespeed_libraries.conf from Apache-format to Nginx-format,
|
||||
# supporting the canonicalize_javascript_libraries filter.
|
||||
# Inspired by https://github.com/pagespeed/ngx_pagespeed/issues/532
|
||||
#
|
||||
# Usage:
|
||||
# scripts/pagespeed_libraries_generator.sh > pagespeed_libraries.conf
|
||||
#
|
||||
# Then have nginx include that configuration file and enable the filter
|
||||
# canonicalize_javascript_libraries.
|
||||
#
|
||||
# Author: vid@zippykid.com (Vid Luther)
|
||||
# jefftk@google.com (Jeff Kaufman)
|
||||
|
||||
URL="https://modpagespeed.googlecode.com/svn/trunk/src/"
|
||||
URL+="net/instaweb/genfiles/conf/pagespeed_libraries.conf"
|
||||
curl -s "$URL" \
|
||||
| grep ModPagespeedLibrary \
|
||||
| while read library size hash url ; do
|
||||
echo " pagespeed Library $size $hash $url;"
|
||||
done
|
||||
@@ -61,6 +61,7 @@
|
||||
#include "net/instaweb/util/public/google_message_handler.h"
|
||||
#include "net/instaweb/util/public/google_url.h"
|
||||
#include "net/instaweb/util/public/gzip_inflater.h"
|
||||
#include "net/instaweb/util/public/null_message_handler.h"
|
||||
#include "net/instaweb/util/public/query_params.h"
|
||||
#include "net/instaweb/util/public/statistics_logger.h"
|
||||
#include "net/instaweb/util/public/stdio_file_system.h"
|
||||
@@ -532,6 +533,45 @@ bool ps_is_global_only_option(const StringPiece& option_name) {
|
||||
return false;
|
||||
}
|
||||
|
||||
char* ps_init_dir(const StringPiece& directive,
|
||||
const StringPiece& path,
|
||||
ngx_conf_t* cf) {
|
||||
if (path.size() == 0 || path[0] != '/') {
|
||||
return string_piece_to_pool_string(
|
||||
cf->pool, net_instaweb::StrCat(directive, " ", path,
|
||||
" must start with a slash"));
|
||||
}
|
||||
|
||||
net_instaweb::StdioFileSystem file_system;
|
||||
net_instaweb::NullMessageHandler message_handler;
|
||||
GoogleString gs_path;
|
||||
path.CopyToString(&gs_path);
|
||||
if (!file_system.IsDir(gs_path.c_str(), &message_handler).is_true()) {
|
||||
if (!file_system.RecursivelyMakeDir(path, &message_handler)) {
|
||||
return string_piece_to_pool_string(
|
||||
cf->pool, net_instaweb::StrCat(
|
||||
directive, " path ", path,
|
||||
" does not exist and could not be created."));
|
||||
}
|
||||
// Directory created, but may not be readable by the worker processes.
|
||||
}
|
||||
|
||||
if (geteuid() != 0) {
|
||||
return NULL; // We're not root, so we're staying whoever we are.
|
||||
}
|
||||
|
||||
ngx_core_conf_t* ccf =
|
||||
(ngx_core_conf_t*)(ngx_get_conf(cf->cycle->conf_ctx, ngx_core_module));
|
||||
CHECK(ccf != NULL);
|
||||
|
||||
if (chown(gs_path.c_str(), ccf->user, ccf->group) != 0) {
|
||||
return string_piece_to_pool_string(
|
||||
cf->pool, net_instaweb::StrCat(
|
||||
directive, " ", path, " unable to set permissions"));
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#define NGX_PAGESPEED_MAX_ARGS 10
|
||||
char* ps_configure(ngx_conf_t* cf,
|
||||
NgxRewriteOptions** options,
|
||||
@@ -564,6 +604,21 @@ char* ps_configure(ngx_conf_t* cf,
|
||||
}
|
||||
}
|
||||
|
||||
// Some options require the worker process to be able to read and write to
|
||||
// a specific directory. Generally the master process is root while the
|
||||
// worker is nobody, so we need to change permissions and create the directory
|
||||
// if necessary.
|
||||
if (n_args == 2 &&
|
||||
(net_instaweb::StringCaseEqual("LogDir", args[0]) ||
|
||||
net_instaweb::StringCaseEqual("FileCachePath", args[0]))) {
|
||||
char* error_message = ps_init_dir(args[0], args[1], cf);
|
||||
if (error_message != NULL) {
|
||||
return error_message;
|
||||
}
|
||||
// The directory has been prepared, but we haven't actually parsed the
|
||||
// directive yet. That happens below in ParseAndSetOptions().
|
||||
}
|
||||
|
||||
ps_main_conf_t* cfg_m = static_cast<ps_main_conf_t*>(
|
||||
ngx_http_cycle_get_module_main_conf(cf->cycle, ngx_pagespeed));
|
||||
if (*options == NULL) {
|
||||
|
||||
@@ -120,14 +120,14 @@ PROXY_CACHE="$TEST_TMP/proxycache"
|
||||
TMP_PROXY_CACHE="$TEST_TMP/tmpproxycache"
|
||||
ERROR_LOG="$TEST_TMP/error.log"
|
||||
ACCESS_LOG="$TEST_TMP/access.log"
|
||||
check_simple mkdir "$PROXY_CACHE"
|
||||
check_simple mkdir "$TMP_PROXY_CACHE"
|
||||
|
||||
# Check that we do ok with directories that already exist.
|
||||
FILE_CACHE="$TEST_TMP/file-cache"
|
||||
check_simple mkdir "$FILE_CACHE"
|
||||
|
||||
# And directories that don't.
|
||||
SECONDARY_CACHE="$TEST_TMP/file-cache/secondary/"
|
||||
check_simple mkdir "$SECONDARY_CACHE"
|
||||
SHM_CACHE="$TEST_TMP/file-cache/with_shm/"
|
||||
check_simple mkdir "$SHM_CACHE"
|
||||
SHM_CACHE="$TEST_TMP/file-cache/intermediate/directories/with_shm/"
|
||||
|
||||
VALGRIND_OPTIONS=""
|
||||
|
||||
|
||||
Reference in New Issue
Block a user