尝试设置Nginx处理2个域我遇到了一些问题。虽然我的两个域的设置与静态html处理正常工作,但试图推进并启动Nginx背后的两个python应用程序。我尝试了一些不同的wsgi容器和不同的微框架,但问题是Nginx无法处理虚拟主机,而是它只在两个域地址处提供一个应用程序。
这是Nginx conf:
user www-data;
worker_processes 8;
pid /var/run/nginx.pid;
events {
worker_connections 768;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
server_names_hash_bucket_size 64;
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
gzip on;
gzip_disable "msie6";
server {
listen 80;
server_name www.domainA.com;
root /var/www/domainA.com;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Originating-IP $remote_addr;
proxy_set_header HTTP_REMOTE_ADDR $remote_addr;
proxy_set_header REMOTE_ADDR $remote_addr;
proxy_set_header CLIENT_IP $remote_addr;
proxy_pass http://127.0.0.2:7000;
}
}
server {
listen 80;
server_name www.domainB.com;
root /var/www/domainB.com;
location / {
... ... blah blah...same story...except this proxy pass.....
proxy_pass http://127.0.0.1:5000;
}
}
}
任何帮助?
修改
尝试将空服务器块添加为第一个块,然后返回404。
答案 0 :(得分:0)
这些是面向外部的网站吗?
如果你把完整的ip放在你的listen子句中,你应该开始正常工作。
listen 512.548.595.485:80;
现在你有两个网站的服务器ip导致冲突。
希望这有帮助。
答案 1 :(得分:0)
在虚拟主机共享ip和端口的senario中,nginx通过将客户端发送的Host头与每个服务器的server_name条目进行比较来选择正确的虚拟主机。如果您curl
使用以下内容来查看您为主机标头发送的确切内容:
curl -s --trace-ascii - http://www.domainA.com | grep 'Host:'
要使您的server_name更灵活,请使用.example.com表示法。这是example.com和* .example.com的简写。或者只需添加任意数量的server_name条目。
接下来确认您的应用正在侦听正确的ips和端口。 Shell进入您的服务器并尝试:
curl -I 'http://127.0.0.1:5000'
curl -I 'http://127.0.0.2:7000'
答案 2 :(得分:0)
最后我结束了这样的问题。在测试条件下,我没有添加任何会使Nginx满意的口味。然后我找到了THIS LINK:
如果“Host”标头字段与服务器名称不匹配,NGINX会将请求路由到此端口的默认服务器。默认服务器是nginx.conf文件中列出的第一个服务器。如果在服务器上下文中的listen指令中设置了default_server参数,则将覆盖此值。下面给出一个例子。
Nginx文档和教程分散在少数网站上,因此找到少数并不意味着您得到了所需的所有答案。
答案 3 :(得分:0)
我认为,这是你的解决方案。创建一个名称应为virtualhost.sh的BASH文件。复制并粘贴以下代码:
#!/bin/bash
domain=$1
root="/data/$domain"
block="/etc/nginx/sites-available/$domain"
# Create the Document Root directory
mkdir -p $root
# Assign ownership to your regular user account
chown -R $USER:$USER $root
# Create the Nginx server block file:
tee $block > /dev/null <<EOF
server {
listen 80;
listen [::]:80;
root /data/$domain;
index index.php index.html index.htm;
server_name $domain www.$domain;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
include fastcgi_params;
}
location ~ /\.ht {
access_log off;
log_not_found off;
deny all;
}
location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
access_log off;
log_not_found off;
expires 30d;
}
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
}
EOF
# Link to make it available
ln -s $block /etc/nginx/sites-enabled/
# Test configuration and reload if successful
nginx -t && service nginx reload
您需要调用此BASH文件:
virtualhost.sh www.yourdomain.com