news

Drupal 8 nginx配置参考模板

为了让Drupal站点运行的更快一点,我们在实际的Drupal8站点,基本上从apache 迁移到了nginx上面,使用nginx + php-fpm这样的组合,效果很好。我们常用的nginx配置参考模板:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

server {

    server_name example.com;

    root /var/www/drupal8## <-- Your only path reference.

  

    location = /favicon.ico {

        log_not_found off;

        access_log off;

    }

  

    location = /robots.txt {

        allow all;

        log_not_found off;

        access_log off;

    }

  

    # Very rarely should these ever be accessed outside of your lan

    location ~* \.(txt|log)$ {

        allow 192.168.0.0/16;

        deny all;

    }

  

    location ~ \..*/.*\.php$ {

        return 403;

    }

  

    location ~ ^/sites/.*/private/ {

        return 403;

    }

  

    # Block access to scripts in site files directory

    location ~ ^/sites/[^/]+/files/.*\.php$ {

        deny all;

    }

  

    # Allow "Well-Known URIs" as per RFC 5785

    location ~* ^/.well-known/ {

        allow all;

    }

  

    # Block access to "hidden" files and directories whose names begin with a

    # period. This includes directories used by version control systems such

    # as Subversion or Git to store control files.

    location ~ (^|/)\. {

        return 403;

    }

  

    location / {

        # try_files $uri @rewrite; # For Drupal <= 6

        try_files $uri /index.php?$query_string; # For Drupal >= 7

    }

  

    location @rewrite {

        rewrite ^/(.*)$ /index.php?q=$1;

    }

  

    # Don't allow direct access to PHP files in the vendor directory.

    location ~ /vendor/.*\.php$ {

        deny all;

        return 404;

    }

  

    # In Drupal 8, we must also match new paths where the '.php' appears in

    # the middle, such as update.php/selection. The rule we use is strict,

    # and only allows this pattern with the update.php front controller.

    # This allows legacy path aliases in the form of

    # blog/index.php/legacy-path to continue to route to Drupal nodes. If

    # you do not have any paths like that, then you might prefer to use a

    # laxer rule, such as:

    #   location ~ \.php(/|$) {

    # The laxer rule will continue to work if Drupal uses this new URL

    # pattern with front controllers other than update.php in a future

    # release.

    location ~ '\.php$|^/update.php' {

        fastcgi_split_path_info ^(.+?\.php)(|/.*)$;

        # Security note: If you're running a version of PHP older than the

        # latest 5.3, you should have "cgi.fix_pathinfo = 0;" in php.ini.

        # See http://serverfault.com/q/627903/94922 for details.

        include fastcgi_params;

        # Block httpoxy attacks. See https://httpoxy.org/.

        fastcgi_param HTTP_PROXY "";

        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

        fastcgi_param PATH_INFO $fastcgi_path_info;

        fastcgi_param QUERY_STRING $query_string;

        fastcgi_intercept_errors on;

        # PHP 5 socket location.

        #fastcgi_pass unix:/var/run/php5-fpm.sock;

        # PHP 7 socket location.

        fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;

    }

  

    # Fighting with Styles? This little gem is amazing.

    # location ~ ^/sites/.*/files/imagecache/ { # For Drupal <= 6

    location ~ ^/sites/.*/files/styles/ # For Drupal >= 7

        try_files $uri @rewrite;

    }

  

    # Handle private files through Drupal. Private file's path can come

    # with a language prefix.

    location ~ ^(/[a-z\-]+)?/system/files/ # For Drupal >= 7

        try_files $uri /index.php?$query_string;

    }

  

    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {

        try_files $uri @rewrite;

        expires max;

        log_not_found off;

    }

}

参考URL:https://www.nginx.com/resources/wiki/start/topics/recipes/drupal/

将包含index.php的路径重定向到简洁URL:

if ($request_uri ~* "^(.*/)index\.(html?|php)\/?(.*)$") { return 301 $1$3; }

重定向到https:

return 301 https://www.xqipu.com$request_uri;