Я выполняю Nginx по Apache.
Я Nginx слушаю порт 80
и проксируйте его к порту 8080
, который слушает Apache.
До сих пор это работает на прямой URL в файлы, как domain.com
и domain.com/index.php
.
Но если я перехожу в domain.com/test
, это говорит 404 Not Found nginx/1.4.6 (Ubuntu)
даже то, что я настроил a route
для /test
.
Вот моя конфигурация nginx для домена:
server {
listen 80;
access_log /var/www/site.com/logs/nginx.access.log;
error_log /var/www/site.com/logs/nginx.error.log;
root /var/www/site.com/public_html/public;
index index.php index.html;
server_name site.com;
location \ {
try_files $uri $uri/ index.php/$uri;
}
location ~* ^.*\.php$ {
if (!-f $request_filename) {
return 404;
}
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:8080;
}
location ~ /\.(ht|git) {
deny all;
}
}
И вот конфигурация Apache для домена:
<VirtualHost *:8080>
ServerName site.com
DocumentRoot /var/www/site.com/public_html/public/
CustomLog /var/www/site.com/logs/apache.access.log common
ErrorLog /var/www/site.com/logs/apache.error.log
</VirtualHost>
Так как Вы уже используете nginx, почему не канава Apache+mod_php для php-fpm? Это избегает потребности в прокси.
После установки php5-fpm
, добавьте этот vhost и включите его с sudo ln -s ../sites-available/example.com.conf /etc/nginx/sites-enabled/
# /etc/nginx/sites-available/example.com.conf
server {
listen 80;
server_name example.com;
root /var/www/example.com/public_html/public;
access_log /var/www/example.com/logs/access.log;
error_log /var/www/example.com/logs/error.log;
# Disallow access to hidden files (.htaccess, .git, etc.)
location ~ /\. {
deny all;
}
# Some locations will never contain PHP files, handle it in the server
location ~ ^/(robots.txt|favicon.ico)(/|$) {
try_files $uri =404;
}
location = /index.php {
# Disable direct access to the source code of index.php. If you have a
# Laravel route for '/index.php', copy the @php_router block below.
return 404;
}
location / {
# Try to serve the static files, otherwise call into PHP
try_files $uri @php_router;
}
location @php_router {
include fastcgi_params;
# If you move index.php outside public/, adjust it here.
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
}
Я понял его. Вот что-то, что людей, пытающихся сделать должно действительно знать то же. Таким образом, вот мои доли.
я прихожу к решению со следующим:
server {
listen 80;
access_log /var/www/site.com/logs/nginx.access.log;
error_log /var/www/site.com/logs/nginx.error.log;
root /var/www/site.com/public_html/public;
index index.php index.html;
server_name site.com;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:8080;
}
location ~* ^.*\.php$ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:8080;
}
location ~ /\.(ht|git) {
deny all;
}
}
первая вещь, я добавил настройки прокси для location / {
, поскольку еще она не могла бы отправить Вас в Apache.
следующая вещь, которую я сделал, удаляла try_files
из всех местоположений, поскольку Apache использует .htaccess
для конфигурирования этого.
И это было моим решением.