2017-12-08 5 views
1

私はこのnginxのvhostの設定を理解する狂っているだろう。私の問題は/ v2の場所であり、php-fpmにphpを送るのではなく、/ v2の外で正しく動作します。誰かが私に間違いを指摘できますか?nginxの場所は、PHPを解釈しない

server { 
    listen 443 ssl; 
    include ssl.conf; 
    include hardening.conf; 
    server_name myapp.domain.com myapp; 
    ssl_certificate /etc/pki/tls/certs/myapp.domain.com.crt; 
    ssl_certificate_key /etc/pki/tls/private/myapp.domain.com.key; 
    access_log /var/log/nginx/myapp.domain.com-access.log main; 
    error_log /var/log/nginx/myapp.domain.com-error.log notice; 
    root /var/www/html/myapp.domain.com; 

    location ~ /\.ht { 
    deny all; 
    } 

    location ~ /v2 { 
    alias /var/www/html/myapp.domain.com/version-2/web; 
    try_files $uri index.php$is_args$args; 
    } 

    location ~ [^/]\.php(/|$) { 
    fastcgi_split_path_info ^(.+?\.php)(/.*)$; 
    if (!-f $document_root$fastcgi_script_name) { 
     return 404; 
    } 

    # Mitigate https://httpoxy.org/ vulnerabilities 
    fastcgi_param HTTP_PROXY ""; 

    fastcgi_pass localhost:9000; 
    fastcgi_index index.php; 
    include fastcgi_params.conf; 
    } 
} 

server { 
    listen 443 ssl; 
    include ssl.conf; 
    include hardening.conf; 
    server_name myapp.domain.com myapp; 
    ssl_certificate /etc/pki/tls/certs/myapp.domain.com.crt; 
    ssl_certificate_key /etc/pki/tls/private/myapp.domain.com.key; 
    access_log /var/log/nginx/myapp.domain.com-access.log main; 
    error_log /var/log/nginx/myapp.domain.com-error.log notice; 
    root /var/www/html/myapp.domain.com; 

    location ~ /\.ht { 
    deny all; 
    } 

    location ~ /v2 { 
    alias /var/www/html/myapp.domain.com/version-2/web; 
    try_files $uri index.php$is_args$args; 

    } 

    location ~ [^/]\.php(/|$) { 
    fastcgi_split_path_info ^(.+?\.php)(/.*)$; 
    if (!-f $document_root$fastcgi_script_name) { 
     return 404; 
    } 

    # Mitigate https://httpoxy.org/ vulnerabilities 
    fastcgi_param HTTP_PROXY ""; 

    fastcgi_pass localhost:9000; 
    fastcgi_index index.php; 
    include fastcgi_params.conf; 
    } 
} 

は、コメントによると、私は、ネストされた場所のソリューションをしようとしているが、私はhttps://myapp.domain.com/v2/index.phpながら/var/www/html/myapp.domain.com/version-2/web/index.phpがファイルシステム上に存在しているしようとすると、私は今、404を受け取ります。また、与えられたリンク上で説明したように、私は^から^~に私の場所を変更しました。どのようなアイデアが間違っている?

server { 
    listen 443 ssl; 
    include ssl.conf; 
    include hardening.conf; 
    server_name myapp.domain.com myapp; 
    ssl_certificate /etc/pki/tls/certs/myapp.domain.com.crt; 
    ssl_certificate_key /etc/pki/tls/private/myapp.domain.com.key; 
    access_log /var/log/nginx/myapp.domain.com-access.log main; 
    error_log /var/log/nginx/myapp.domain.com-error.log notice; 
    root /var/www/html/myapp.domain.com; 

    location ~ /\.ht { 
    deny all; 
    } 

    location ^~ /v2 { 
    alias /var/www/html/myapp.domain.com/version-2/web; 
    try_files $uri index.php$is_args$args; 

    location ~ [^/]\.php(/|$) { 
     fastcgi_split_path_info ^(.+?\.php)(/.*)$; 
     if (!-f $document_root$fastcgi_script_name) { 
     return 404; 
     } 

     # Mitigate https://httpoxy.org/ vulnerabilities 
     fastcgi_param HTTP_PROXY ""; 

     fastcgi_pass localhost:9000; 
     fastcgi_index index.php; 
     include fastcgi_params.conf; 
    } 

    } 

    location ~ [^/]\.php(/|$) { 
    fastcgi_split_path_info ^(.+?\.php)(/.*)$; 
    if (!-f $document_root$fastcgi_script_name) { 
     return 404; 
    } 

    # Mitigate https://httpoxy.org/ vulnerabilities 
    fastcgi_param HTTP_PROXY ""; 

    fastcgi_pass localhost:9000; 
    fastcgi_index index.php; 
    include fastcgi_params.conf; 
    } 
} 
+0

をあなたは異なるルーツを持つ2つのPHPのアプリを持っています。 '.php' URIを処理するには2つの異なる' location'ブロックが必要です。 [this answer](https://stackoverflow.com/questions/45287201/wordpress-laravel-and-nginx/45297857#45297857)のように、ネストされた 'location'ブロックの使用を検討してください。 –

+0

@リチャードスミス私はあなたの提案で投稿を更新しましたが、今投稿で説明されているように404が表示されます。 – digrouz

+0

'$ document_root $ fastcgi_script_name'は' alias'では動作しません。代わりに '$ request_filename'を使用してください。また、 'SCRIPT_FILENAME'の値を設定する必要があります。また、[この問題](https://trac.nginx.org/nginx/ticket/97)のために、 'try_files'と' alias'を一緒に使用することは避けています。 –

答えて

0

あなたはphp5-fpmの場所を指す必要があります。このように:

location ~ \.php$ { 
     include snippets/fastcgi-php.conf; 
     fastcgi_pass unix:/var/run/php5-fpm.sock; 
} 

全例に見てみましょう:

server { 
    listen 8082; 
    listen [::]:8082; 
    server_name 192.168.2.60; 

    root /usr/share/nginx/html/phpmyadmin/; 
    index index.php index.html index.htm; 


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

    location ~ \.php$ { 
      include snippets/fastcgi-php.conf; 
      fastcgi_pass unix:/var/run/php5-fpm.sock; 
    } 

    location ~ /\.ht { 
      deny all; 
    } 
} 
関連する問題