Я слишком долго пытался настроить среду разработки на моем Ubuntu 12.04. Я намерен настроить все так, как мне придется сделать позже в производственной среде, поэтому я последовал этот учебник о том, как настроить Nginx в качестве обратного прокси с Apache 2.
Я искал, и мой вопрос очень похож на вот этот, но ответа там не было, и я не могу комментировать его, чтобы добавить некоторые из своих исследований.
Перейдем к файлам:
Сначала я установил mod_wsgi из apt-get, а затем создал файл mysite в / etc / apache2 / sites-available:
<VirtualHost *:8080>
ServerAdmin mymail@mymail.com
ServerName mysite.dev
ErrorLog /path/to/developmentfolder/mysite/logs/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel debug
CustomLog /path/to/developmentfolder/mysite/logs/access.log combined
WSGIDaemonProcess mysite
WSGIProcessGroup mysite
WSGIScriptAlias / /path/to/developmentfolder/mysite/apache/django.wsgi
<Directory /path/to/developmentfolder/mysite/apache>
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
Обратите внимание, что я вообще не менял httpd.conf для этой настройки (не знаю, ошибка ли это).
Затем я изменил ports.conf:
#NameVirtualHost *:80
#Listen 80
#Modificaciones para usar nginx
Listen 8080
NameVirtualHost *:8080
Далее я создал
import os, sys
apache_configuration = os.path.dirname(__file__)
project = os.path.dirname(apache_configuration)
workspace = os.path.dirname(project)
sys.path.append(workspace)
sys.path.append('/path/to/developmentfolder/mysite')
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
Затем запустите:
# a2ensite mysite
#/etc/init.d/apache2 restart
И я закончил с конфигурацией Apache.
На этом этапе, после добавления записи в мой файл hosts, я могу перейти на mysite.dev:8080 и увидеть сообщение Django «Это работает».
Я установил Nginx 1.6.
Создал пользователя для запуска сервера nginx:
# adduser –system –no-create-home –disabled-login –disabled-password –group nginx
Затем создал скрипт для автоматического запуска nginx, я фактически загрузил его с http://library.linode.com/assets/658-init-deb.sh, поместил его в /etc/init.d/, переименовал в nginx а затем внес некоторые изменения:
#! /bin/sh
### BEGIN INIT INFO
# Provides: nginx
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts the nginx web server
# Description: starts nginx using start-stop-daemon
### END INIT INFO
PATH=/opt/nginx/sbin:/sbin:/bin:/usr/sbin:/usr/bin
# Changed the path of the DAEMON as the one in the original script didn't match mine
DAEMON=/usr/sbin/nginx
#Everything from here is exactly as it was
NAME=nginx
DESC=nginx
test -x $DAEMON || exit 0
# Include nginx defaults if available
if [ -f /etc/default/nginx ] ; then
. /etc/default/nginx
fi
set -e
case "$1" in
start)
echo -n "Starting $DESC: "
start-stop-daemon --start --quiet --pidfile /opt/nginx/logs/$NAME.pid \
--exec $DAEMON -- $DAEMON_OPTS
echo "$NAME."
;;
stop)
echo -n "Stopping $DESC: "
start-stop-daemon --stop --quiet --pidfile /opt/nginx/logs/$NAME.pid \
--exec $DAEMON
echo "$NAME."
;;
restart|force-reload)
echo -n "Restarting $DESC: "
start-stop-daemon --stop --quiet --pidfile \
/opt/nginx/logs/$NAME.pid --exec $DAEMON
sleep 1
start-stop-daemon --start --quiet --pidfile \
/opt/nginx/logs/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS
echo "$NAME."
;;
reload)
echo -n "Reloading $DESC configuration: "
start-stop-daemon --stop --signal HUP --quiet --pidfile /opt/nginx/logs/$NAME.pid \
--exec $DAEMON
echo "$NAME."
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
exit 1
;;
esac
exit 0
Далее создали папки / USR / местные / nginx / conf / сайты-доступные / и / usr / локальный / nginx / conf / сайты-включены / и отредактировал /usr/local/nginx/conf/nginx.conf для этого (после некоторых изменений оригинала из учебника):
user nginx;
worker_processes 1;
error_log logs/error.log;
pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
#modificado el include con una ruta donde realmente se encuentra el archivo
include /etc/nginx/mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
gzip on;
include /usr/local/nginx/conf/sites-enabled/*;
}
Затем создал / usr / local / nginx / conf / sites-aviable / mysite. Поскольку мой Apache, похоже, работает нормально, и после прочтения некоторых рекомендаций Nginx, Такое ощущение, что проблема в этом файле, но я новичок в серверах и не могу понять, почему:
server {
listen 80;
server_name mysite.dev;
access_log /path/to/developmentfolder/mysite/logs/nginx_access.log;
error_log /path/to/developmentfolder/mysite/logs/nginx_error.log;
location / {
proxy_pass http://mysite.dev:8080;
include /usr/local/nginx/conf/proxy.conf;
}
location ~ /(js/|css/|imagenes/|media).* {
root /path/to/developmentfolder/mysite/mysite/static;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
Это файл proxy.conf, включенный выше:
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
Затем создала символическую ссылку в sites-enabled на файл конфигурации в sites-available: # ln -s / usr / local / nginx / conf / sites-aviable / ceia / usr / local / nginx / conf / sites-enabled /
Перезапускаем nginx:
# /etc/init.d/nginx restart
И когда я открываю mysite.dev, я получаю только страницу «Добро пожаловать в Nginx», но, если я правильно понял, это снова должна быть страница «Это сработало» (добро пожаловать в django).
Я также заметил, что не могу найти журналы ошибок nginx ни в моей папке разработки (расположенной в моей домашней папке), ни в / usr / local / nginx / conf
Как заставить nginx правильно перенаправлять на apache?
Это проблема с разрешениями, связанная с созданным мной пользователем nginx?
Большое спасибо, извините за огромный пост.
Эврика, я заставил это работать.
Основная проблема заключалась в информации об учебнике, она была значительно устаревшей.
Я установил nginx 1.6, который создает структуру папок, аналогичную Apache, с доступными сайтами и включенными сайтами. Нет необходимости (и бесполезно, если вы не знаете, как его настроить) в шагах, которые я сделал, создав эти папки в / usr / local / nginx ...
Файл conf по умолчанию также находится в каталоге установки /etc/nginx/nginx.conf. Мне не нужно было добавлять никаких строк в этот файл.
Это файл conf для mysite, расположенный в / etc / nginx / sites-available (и также связанный с сайтами с поддержкой)
server {
listen 80;
server_name mysite.dev;
location / {
proxy_pass http://mysite.dev:8080/;
#The following lines were at proxy.conf, but I copied them here trying to avoid any
# problems managing permissions or files. The include directive for proxy.conf is commented.
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
# This might work, but bypassed it to test a simpler solution
# include /usr/local/nginx/conf/proxy.conf;
}
location ^~ /static/{
alias /var/www/mysite/static/;
access_log off;
}
# I'm not completely sure about the following, but I don't have any troubles with it yet and
# as far as I know, it might be right.
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
Остальные файлы такие, как я указал в вопросе.
Затем НЕ ЗАБУДЬТЕ УДАЛИТЬ КЭШ БРАУЗЕРА после внесения изменений, иначе вы можете сойти с ума.
Спасибо за вашу помощь. Надеюсь, этот ответ поможет людям, столкнувшимся с той же проблемой в будущем.
С самого начала у вас есть два закрывающих тега в определении виртуального хоста для Apache. Я предполагаю, что вы оставили корневой документ сервера по умолчанию для Apache без изменений, даже если он не указан.
Я заметил, что для вашей конфигурации NGINX вы не указали proxy_redirect. Попробуйте включить это в конфигурацию вашего сервера NGINX и посмотрите, поможет ли вручную указание заголовка местоположения.
Кроме того, вот отличный учебник Я ссылался при настройке собственной среды разработки. (с использованием NGINX для статических файлов и Apapche для динамических). Возможно, это даст вам дополнительные сведения о том, как правильно начать работу.