Ответы пользователя по тегу Nginx
  • Почем php-fpm не работает ни через сокеты, ни через tcp?

    0neS
    @0neS Автор вопроса
    Конфиги php-fpm не вместились в максимальный размер вопроса, выкладываю сюда.

    /etc/php5/fpm/php-fpm.conf:
    spoiler
    ;;;;;;;;;;;;;;;;;;;;;
    ; FPM Configuration ;
    ;;;;;;;;;;;;;;;;;;;;;
    
    ; All relative paths in this configuration file are relative to PHP's install
    ; prefix (/usr). This prefix can be dynamically changed by using the
    ; '-p' argument from the command line.
    
    ; Include one or more files. If glob(3) exists, it is used to include a bunch of
    ; files from a glob(3) pattern. This directive can be used everywhere in the
    ; file.
    ; Relative path can also be used. They will be prefixed by:
    ;  - the global prefix if it's been set (-p argument)
    ;  - /usr otherwise
    ;include=/etc/php5/fpm/*.conf
    
    ;;;;;;;;;;;;;;;;;;
    ; Global Options ;
    ;;;;;;;;;;;;;;;;;;
    
    [global]
    ; Pid file
    ; Note: the default prefix is /var
    ; Default Value: none
    pid = /run/php5-fpm.pid
    
    ; Error log file
    ; If it's set to "syslog", log is sent to syslogd instead of being written
    ; in a local file.
    ; Note: the default prefix is /var
    ; Default Value: log/php-fpm.log
    error_log = log/php/php5-fpm.log
    
    ; syslog_facility is used to specify what type of program is logging the
    ; message. This lets syslogd specify that messages from different facilities
    ; will be handled differently.
    ; See syslog(3) for possible values (ex daemon equiv LOG_DAEMON)
    ; Default Value: daemon
    ;syslog.facility = daemon
    
    ; syslog_ident is prepended to every message. If you have multiple FPM
    ; instances running on the same server, you can change the default value
    ; which must suit common needs.
    ; Default Value: php-fpm
    ;syslog.ident = php-fpm
    
    ; Log level
    ; Possible Values: alert, error, warning, notice, debug
    ; Default Value: notice
    log_level = debug
    
    ; If this number of child processes exit with SIGSEGV or SIGBUS within the time
    ; interval set by emergency_restart_interval then FPM will restart. A value
    ; of '0' means 'Off'.
    ; Default Value: 0
    emergency_restart_threshold = 10
    
    ; Interval of time used by emergency_restart_interval to determine when 
    ; a graceful restart will be initiated.  This can be useful to work around
    ; accidental corruptions in an accelerator's shared memory.
    ; Available Units: s(econds), m(inutes), h(ours), or d(ays)
    ; Default Unit: seconds
    ; Default Value: 0
    emergency_restart_interval = 1m
    
    ; Time limit for child processes to wait for a reaction on signals from master.
    ; Available units: s(econds), m(inutes), h(ours), or d(ays)
    ; Default Unit: seconds
    ; Default Value: 0
    process_control_timeout = 10s
    
    ; The maximum number of processes FPM will fork. This has been design to control
    ; the global number of processes when using dynamic PM within a lot of pools.
    ; Use it with caution.
    ; Note: A value of 0 indicates no limit
    ; Default Value: 0
    process.max = 128
    
    ; Specify the nice(2) priority to apply to the master process (only if set)
    ; The value can vary from -19 (highest priority) to 20 (lower priority)
    ; Note: - It will only work if the FPM master process is launched as root
    ;       - The pool process will inherit the master process priority
    ;         unless it specified otherwise
    ; Default Value: no set
    ; process.priority = -19
    
    ; Send FPM to background. Set to 'no' to keep FPM in foreground for debugging.
    ; Default Value: yes
    daemonize = no
     
    ; Set open file descriptor rlimit for the master process.
    ; Default Value: system defined value
    ;rlimit_files = 1024
     
    ; Set max core size rlimit for the master process.
    ; Possible Values: 'unlimited' or an integer greater or equal to 0
    ; Default Value: system defined value
    ;rlimit_core = 0
    
    ; Specify the event mechanism FPM will use. The following is available:
    ; - select     (any POSIX os)
    ; - poll       (any POSIX os)
    ; - epoll      (linux >= 2.5.44)
    ; - kqueue     (FreeBSD >= 4.1, OpenBSD >= 2.9, NetBSD >= 2.0)
    ; - /dev/poll  (Solaris >= 7)
    ; - port       (Solaris >= 10)
    ; Default Value: not set (auto detection)
    events.mechanism = epoll
    
    ; When FPM is build with systemd integration, specify the interval,
    ; in second, between health report notification to systemd.
    ; Set to 0 to disable.
    ; Available Units: s(econds), m(inutes), h(ours)
    ; Default Unit: seconds
    ; Default value: 10
    ;systemd_interval = 10
    
    ;;;;;;;;;;;;;;;;;;;;
    ; Pool Definitions ; 
    ;;;;;;;;;;;;;;;;;;;;
    
    ; Multiple pools of child processes may be started with different listening
    ; ports and different management options.  The name of the pool will be
    ; used in logs and stats. There is no limitation on the number of pools which
    ; FPM can handle. Your system will tell you anyway :)
    
    ; To configure the pools it is recommended to have one .conf file per
    ; pool in the following directory:
    include=/etc/php5/fpm/pool.d/*.conf

    /etc/php5/fpm/pool.d/test.conf:
    spoiler
    [test]
    
    include = /etc/php5/fpm/pool.d/common.conf
    
    listen = /var/run/php5-fpm/test.sock
    
    error_log = /home/ivan/sites/test/app/logs/php-fpm-error.log
    slowlog = /home/ivan/sites/test/app/logs/php-fpm-slow.log
    php_admin_value[error_log] = /home/ivan/sites/test/app/logs/php-fpm-error.log
    php_admin_value[open_basedir] = /home/ivan/sites/test/
    php_admin_value[upload_tmp_dir] = /home/ivan/sites/test/app/tmp
    php_admin_value[session.save_path] = /home/ivan/sites/test/app/sessions
    
    env[TMP] = /home/ivan/sites/test/app/tmp
    env[TMPDIR] = /home/ivan/sites/test/app/tmp
    env[TEMP] = /home/ivan/sites/test/app/tmp

    /etc/php5/fpm/pool.d/common.conf:
    spoiler
    user = ivan
    group = ivan
    
    listen.backlog = 128
    listen.allowed_clients = 127.0.0.1
    listen.mode = 0777
    listen.owner = ivan
    listen.group = ivan
    
    pm = dynamic
    pm.max_children = 50
    pm.start_servers = 2
    pm.min_spare_servers = 2
    pm.max_spare_servers = 5
    pm.max_requests = 100
    ;pm.status_path = /fpm-status
    ;ping.path = /ping
    ;ping.response = pong
    request_terminate_timeout = 30s
    request_slowlog_timeout = 5s
    rlimit_files = 4096
    rlimit_core = 0
    ;chroot = 
    ;chdir = /
    catch_workers_output = yes
    security.limit_extensions = .php


    P.S. Проблема решена установкой php5-fpm другой версии из другого репозитория.
    Ответ написан
    Комментировать
  • Как сделать динамические поддомены (multiple dynamic firewalls, роутинг и т.д.) в symfony2?

    0neS
    @0neS Автор вопроса
    Вот проблемы, которые мучают меня в настоящий момент:
    1) Как на этапе авторизации проверять, принадлежит ли пользователь компании, на поддомене которой он авторизуется?
    2) Как лучше ограничить вывод данных по id текущей компании. Делать в каждом контроллере вручную проверку?
    3) Как в шаблонах выводить, к примеру, company.name? app.user.company.name? Мне кажется это не самый корректный способ.
    4) Как сделать текущую компанию значением по-умолчанию в роутах? Т.е. сейчас же все разруливаю через роуты (host: "{company_slug}.%domain%") и приходится абсолютно в каждом роуте в шаблоне выводить доп. параметром slug текущей компании, типа:
    <a href="{{ path("dashboard.user.list", { "company_slug": app.user.company.slug }) }}">Users</a>


    Сейчас вынес часть логики в эвентлистнер как пишут здесь: knpuniversity.com/screencast/question-answer-day/s...

    public function listAction() {
        $companyManager = $this->container->get('acme.dashboard.company_manager');
        $currentCompany = $companyManager->getCurrentCompany();
        $userManager = $this->container->get('acme.dashboard.user_manager');
        $users = $userManager->findUsersByCompanyId($currentCompany->getId());
    
        return [
            'company' => $currentCompany,
            'users' => $users,
        ];
    }

    Но, помоему, это все еще не предел мечтаний.
    Ответ написан
  • Как изменить порт для nginx?

    0neS
    @0neS
    В конфигах это делается, ручками.
    http {
        ...
        server {
            ...
            listen 80;
            ...
        }
    }

    P.S. В чем смысл апача на 80 порту, когда стоит nginx? Обычно ставят наоборот, чтобы все запросы клиентов шли на nginx, а обрабатывались апачем.
    Ответ написан
  • Настройка apache+nginx для 2х доменов на одном IP?

    0neS
    @0neS
    Не пойму, в чем проблема?
    http {
    	...
    	upstream apache {
    		server 127.0.0.1:8080;
    	}
    
    	server {
    		listen 80 default_server;
    		server_name 123.456.789.012;
    		location / {
    			proxy_pass http://apache;
    		}
    	}
    
    	server {
    		listen 80;
    		server_name site1.ru;
    		...
    		location / {
    			proxy_pass http://apache;
    		}
    	}
    
    	server {
    		listen 80;
    		server_name site2.ru;
    		...
    		location / {
    			proxy_pass http://apache;
    		}
    	}
    }
    Ответ написан
    Комментировать
  • Nginx некорректно отдает большие body

    0neS
    @0neS
    Попробуйте полностью отключить gzip, может проблема в нем.
    gzip off;
    Ответ написан
  • Как разделить сайты на бекенде?

    0neS
    @0neS
    upstream backend {
      server 127.0.0.1:8080;
    }
    
    server {
      listen 80;
      server_name 12.23.34.45; /* внешний ip-адрес сервера */
      
      location / {
        proxy_pass http://backend/;
        proxy_redirect off;
        proxy_intercept_errors on;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
      }
      location ~ /\.ht {
        deny all;
      }
    }
    Ответ написан
    Комментировать
  • Как разделить сайты на бекенде?

    0neS
    @0neS
    Если nginx фронт, а apache бэк, то какой смысл nginx различать, на какой сайт идет запрос? Он должен все запросы перенаправлять на apache, а тот в свою очередь отдавать нужный контент.
    Ответ написан