PHP opcache вызывает сбой функции - PullRequest
0 голосов
/ 07 мая 2018

Какова ситуация?

  • 2 веб-сайта: A и B (laravel5.2)
  • A хотите использовать B s javascript file
  • B использует opcache
  • B с использованием git кодов обновления и post-hook указанный запрос URL сброс opcache

код веб-сайта A:

<script src="https://B/controller/getJsFunction"></script>

код сайта B:

public function getJsFunction()
{
    header('Content-Type:application/javascript');
    header('Cache-Control: max-age=0, must-revalidate');
    //mix('/js/visitor.js') will get visitor.js and auto add the current version
    echo file_get_contents(rtrim(public_path(), '/') . mix('/js/visitor.js'));
}

Что я хочу?

  • веб-сайт A получить веб-сайт B javascript содержимое файла
  • B может обновить номер версии файла javascript в любое время, visitor.v1.js => visitor.v2.js

Что случилось?

B устойчивый возврат 502 HTTP код состояния после периода успешной работы, Когда B Модифицирует любой триггер кода opcache_reset(), даже просто добавляя комментарии, bug исправит некоторое время.

Что у меня есть?

nginx log

2018/05/06 03:56:17 [error] 12747#0: *28155344 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: xxxxxxx, server: xxxxxxx.com, request: "GET /stateless/visitor/js HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "xxxxxx.com", referrer: "https://xxxxxx"

git пост-получение

cd /path/to/site-B/project
unset  GIT_DIR
git pull origin master && curl https://site-B.com/cache.php 

cache.php

<?php
opcache_reset();

nginx.conf

user  nginx nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log  error;

pid        /var/run/nginx.pid;

events {
    use epoll;
    worker_connections 1024;
}

http {
    include         /etc/nginx/black.ip;
    include         /etc/nginx/mime.types;
    default_type    application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;

    keepalive_timeout   600;
    fastcgi_read_timeout 600;
    types_hash_max_size 2048;
    client_max_body_size 20m;

    gzip                on;
    index       index.html index.htm index.php;

    server {
        listen 80 default;
        server_name _;
        return 403;
    }

    server {
        listen       80;
        listen       443;
        server_name  site-b.com;
        root         /path/to/site-b.com/public;

        ssl on;
        ssl_certificate /path/to/site-b.com.crt;
        ssl_certificate_key /path/to/site-b.com.key;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_prefer_server_ciphers on;

        if ($scheme = http ) {
            rewrite ^(.*)$ https://$host$1 permanent;
        }

        location / {
            try_files $uri $uri/ /index.php?$query_string;
        }

        location ~* \.(jpg|jpeg|png|gif|js|css|ico|eot|svg|ttf|woff|woff2)$ 
        {
            expires max;
            add_header Cache-Control public;
            add_header Pragma public;
            add_header Vary Accept-Encoding;
        }

        location ~* \.php$ {
            try_files $uri =404;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_param  SCRIPT_FILENAME
                           $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
    }

}

Какая помощь мне нужна?

  • Как ДЕЙСТВИТЕЛЬНО исправить ошибку?
  • Или какие еще методы я должен использовать?
  • Или почему reset_opcache() может исправить ошибку? Или почему opcache вызывает эту ошибку?

Поскольку это онлайн-проект, я временно изменил его на этот сайт A первый запрос сайт B , чтобы получить текущую версию файла javascript, и затем вставьте тег script и установите src url из ответа первого шага

...