nginx.conf和proxy.conf中服务器的设置有什么关系?
What is the relationship of server's setting in both nginx.conf and proxy.conf?
我是 NGINX 的新手。
在我的项目中,server
在 etc/nginx/nginx.conf
和 etc/nginx/conf.d/proxy.conf
中都有定义。并且 etc/nginx/conf.d/proxy.conf
包含在 nginx.conf
中
我不明白这两个文件中服务器设置的关系。前任。在 nginx.conf
中,服务器的设置是 listen 80 ; listen [::]:80 ;
,在 proxy.conf 中,服务器的设置是 listen 80 proxy_protocol
。
- 在上面的例子中,实际通信中将使用哪个设置?
- 服务器 proxy.conf 的设置是否覆盖服务器 nginx.conf 的设置?
- 或者服务器的设置 proxy.conf 将合并到服务器的设置 nginx.conf?
请找到完整的 conf 文件如下:
etc/nginx/conf.d/proxy.conf
content: |
client_max_body_size 500M;
server_names_hash_bucket_size 128;
upstream backend {
server unix:///var/run/puma/my_app.sock;
}
server {
listen 80 proxy_protocol;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
large_client_header_buffers 8 32k;
set_real_ip_from 10.0.0.0/8;
real_ip_header proxy_protocol;
location / {
proxy_http_version 1.1;
proxy_set_header X-Real-IP $proxy_protocol_addr;
proxy_set_header X-Forwarded-For $proxy_protocol_addr;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_buffers 8 32k;
proxy_buffer_size 64k;
proxy_pass http://backend;
proxy_redirect off;
Enables WebSocket support
location /v1/cable {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Upgrade "websocket";
proxy_set_header Connection "Upgrade";
proxy_set_header X-Real-IP $proxy_protocol_addr;
proxy_set_header X-Forwarded-For $proxy_protocol_addr;
}
}
}
etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
include /etc/nginx/conf.d/*.conf;
server {
listen 80 ;
listen [::]:80 ;
server_name localhost;
root /usr/share/nginx/html;
location / {
}
}
}
Nginx 根据 listen
和 server_name
指令的值选择一个 server
块来处理请求。
如果找不到匹配的服务器名称,将使用该端口的默认服务器。
在你问题的配置中,proxy.conf
中的 server
块首先遇到,因此它成为端口 80 的实际默认服务器。
nginx.conf
中的 server
块将只匹配使用正确主机名的请求,即 http://localhost
详情见this document。
我是 NGINX 的新手。
在我的项目中,server
在 etc/nginx/nginx.conf
和 etc/nginx/conf.d/proxy.conf
中都有定义。并且 etc/nginx/conf.d/proxy.conf
包含在 nginx.conf
我不明白这两个文件中服务器设置的关系。前任。在 nginx.conf
中,服务器的设置是 listen 80 ; listen [::]:80 ;
,在 proxy.conf 中,服务器的设置是 listen 80 proxy_protocol
。
- 在上面的例子中,实际通信中将使用哪个设置?
- 服务器 proxy.conf 的设置是否覆盖服务器 nginx.conf 的设置?
- 或者服务器的设置 proxy.conf 将合并到服务器的设置 nginx.conf?
请找到完整的 conf 文件如下:
etc/nginx/conf.d/proxy.conf
content: |
client_max_body_size 500M;
server_names_hash_bucket_size 128;
upstream backend {
server unix:///var/run/puma/my_app.sock;
}
server {
listen 80 proxy_protocol;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
large_client_header_buffers 8 32k;
set_real_ip_from 10.0.0.0/8;
real_ip_header proxy_protocol;
location / {
proxy_http_version 1.1;
proxy_set_header X-Real-IP $proxy_protocol_addr;
proxy_set_header X-Forwarded-For $proxy_protocol_addr;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_buffers 8 32k;
proxy_buffer_size 64k;
proxy_pass http://backend;
proxy_redirect off;
Enables WebSocket support
location /v1/cable {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Upgrade "websocket";
proxy_set_header Connection "Upgrade";
proxy_set_header X-Real-IP $proxy_protocol_addr;
proxy_set_header X-Forwarded-For $proxy_protocol_addr;
}
}
}
etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
include /etc/nginx/conf.d/*.conf;
server {
listen 80 ;
listen [::]:80 ;
server_name localhost;
root /usr/share/nginx/html;
location / {
}
}
}
Nginx 根据 listen
和 server_name
指令的值选择一个 server
块来处理请求。
如果找不到匹配的服务器名称,将使用该端口的默认服务器。
在你问题的配置中,proxy.conf
中的 server
块首先遇到,因此它成为端口 80 的实际默认服务器。
nginx.conf
中的 server
块将只匹配使用正确主机名的请求,即 http://localhost
详情见this document。