gpt4 book ai didi

Apache 和 nginx 的终极配置以正确的方式为所有虚拟主机提供服务

转载 作者:行者123 更新时间:2023-12-02 19:42:53 25 4
gpt4 key购买 nike

我刚刚设置 nginx 来在一个站点上提供静态请求,但我的服务器上有很多站点,我想知道,我是否应该为所有站点都正确设置新的 nginx 服务器配置?我现在在做什么。我有一个包含 Apache 的所有虚拟主机条目的文件,其中包含如下内容:

NameVirtualHost *:8080
<VirtualHost *:8080>
ServerName sky2high.net
DocumentRoot /home/mainsiter/data/www/sky2high.net
</VirtualHost>

<VirtualHost *:8080>
ServerName surdo.asmon.ru
DocumentRoot /home/surdo/data/www/surdo.asmon.ru
</VirtualHost>

<VirtualHost *:8080>
ServerName surdoserver.ru
DocumentRoot /home/surdo/data/www/surdoserver.ru
</VirtualHost>

我在 apache 的 ports.conf 中有这个:

Listen 8080

因此,我将 nginx 设置为与一个站点 (sky2high.net) 配合使用,并创建了下一个配置文件 (/etc/nginx/sites-enabled/sky2high.net):

server {
listen 80;
server_name sky2high.net www.sky2high.net;
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;

access_log /var/log/nginx.access_log;

location ~* \.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|tar|wav|bmp|rtf|swf|ico|flv|txt|xml|docx|xlsx)$ {
root /home/mainsiter/data/www/sky2high.net/;
index index.php;
access_log off;
expires 30d;
}
location ~ /\.ht {
deny all;
}
location / {
proxy_pass http://127.0.0.1:8080/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-for $remote_addr;
proxy_set_header Host $host;
proxy_connect_timeout 60;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_redirect off;
proxy_set_header Connection close;
proxy_pass_header Content-Type;
proxy_pass_header Content-Disposition;
proxy_pass_header Content-Length;
}
}

对于这个域它工作得很好,但是当然另一个虚拟主机坏了。

所以,问题是:nginx 是否有最终的配置选项,可以帮助处理来自所有虚拟主机(域)的所有请求并以正确的方式为它们提供服务?我的意思是,该选项允许不为每个虚拟主机编写单独的配置文件(包含所有这些双倍的内容,例如根和索引选项),但只有一个适用于所有虚拟主机?

PS:我应该将问题转移到服务器故障吗?

更新:嗯..我想知道它是如何工作的,但确实如此。我已经制作了下一个配置文件:

/etc/nginx/nginx.conf

user www-data;
worker_processes 2;

error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;

events {
worker_connections 1024;
}

http {
include /etc/nginx/mime.types;
default_type application/octet-stream;

access_log /var/log/nginx/access.log;

sendfile on;
#tcp_nopush on;

#keepalive_timeout 0;
keepalive_timeout 65;
tcp_nodelay on;

gzip on;
gzip_min_length 1000;
gzip_proxied any;
gzip_disable "msie6";

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}

/etc/nginx/sites-enabled/default

server {
listen 80;

location / {
proxy_pass http://127.0.0.1:8080/;
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;
proxy_set_header Connection close;
proxy_pass_header Content-Type;
proxy_pass_header Content-Disposition;
proxy_pass_header Content-Length;
}
}

我不明白它是如何工作的,但它是......

更新2:或者它不起作用!我查看了控制台中的“top”,并提到 apache 不仅提供 php 请求,还提供静态内容 =(

最佳答案

您现在要做的是将所有网络流量发送到 127.0.0.1:8080,而不允许 Nginx 提供静态文件。

您应该尝试以下操作:

server {
listen 80;
server_name sky2high.net www.sky2high.net;
location / {
proxy_pass http://127.0.0.1:8080;
include /etc/nginx/conf.d/proxy.conf;
}
location ~* ^.+\.(jpg|jpeg|gif|png|ico|tgz|gz|pdf|rar|bz2|exe|ppt|txt|tar|mid|midi|wav|bmp|rtf) {
root /folder/to/static/files;
expires 90d;
}
location ~* ^.+\.(css|js)$ {
root /folder/to/static/files;
expires 30d;
}

并在 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 8m;
client_body_buffer_size 256k;
proxy_connect_timeout 60;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffer_size 4k;
proxy_buffers 32 256k;
proxy_busy_buffers_size 512k;
proxy_temp_file_write_size 256k;

这应该适合你

关于Apache 和 nginx 的终极配置以正确的方式为所有虚拟主机提供服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3434182/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com