我在Linode的主机上安装了Ngnix。我有以下配置:
server {
listen 80;
server_name example.co.uk www.example.co.uk;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
server {
listen 3333;
server_name example.co.uk www.example.co.uk;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:3838;
}
}
Run Code Online (Sandbox Code Playgroud)
奇怪的是,当我通过已经指向IP地址的域名访问端口时,Ngnix有时会返回“无法访问此站点”(在Chrome和Opera上)“连接已重置”(在Firefox上)。
example.co.uk - Fails at times
example.co.uk:3333 - Fails at times
Run Code Online (Sandbox Code Playgroud)
通过IP访问端口永远不会有任何问题,例如。
139.160.200.50 - OK
139.160.200.50:3333 -OK
Run Code Online (Sandbox Code Playgroud)
这种奇怪的原因是什么?
有任何想法吗?
我的任务是使用nginx实现微缓存策略,即缓存一些POST端点的响应几秒钟。
在http部分nginx.conf我有以下内容:
proxy_cache_path /tmp/cache keys_zone=cache:10m levels=1:2 inactive=600s max_size=100m;
Run Code Online (Sandbox Code Playgroud)
然后我location有server:
location /my-url/ {
root dir;
client_max_body_size 50k;
proxy_cache cache;
proxy_cache_valid 10s;
proxy_cache_methods POST;
proxy_cache_key "$request_uri|$request_body";
proxy_ignore_headers Vary;
add_header X-Cached $upstream_cache_status;
proxy_pass http://my-upstream;
}
Run Code Online (Sandbox Code Playgroud)
该应用程序位于输出处,如果我理解正确的my-upstream话Cache-Control: max-age=10,应该使响应可缓存。
但是当我在短时间内(不到10秒)使用curl发出重复请求时
curl -v --data "a=b&c=d" https://my-host/my-url/1573
Run Code Online (Sandbox Code Playgroud)
它们全部到达后端(根据后端日志)。还有,X-Cached总是MISS。
请求和响应如下:
> POST /my-url/1573 HTTP/1.1
> Host: my-host
> User-Agent: curl/7.47.0
> Accept: */*
> Content-Length: 113
> Content-Type: application/x-www-form-urlencoded
>
* upload …Run Code Online (Sandbox Code Playgroud) 我有一个 React 前端和一个 Symfony 后端,我试图在同一个域上提供服务。React 前端需要提供资产(如果存在),否则回退到服务index.html。
我想/api在请求 uri 中提供 php Symfony 应用程序。与 React 应用程序类似,我需要将所有请求转到该index.php文件。
前端服务正常,但 api 服务不正确。/api当我在浏览器中点击时,我从 nginx 收到 404 错误。
我觉得我已经很接近了,但由于某种原因 nginx 没有正确的$document_root. 我添加 header( X-script) 来测试变量是什么,我得到以下结果:
X-script: /usr/share/nginx/html/index.php
Run Code Online (Sandbox Code Playgroud)
这是我的 nginx 配置。
server {
listen 80 default_server;
index index.html index.htm;
access_log /var/log/nginx/my-site.com.log;
error_log /var/log/nginx/my-site.com-error.log error;
charset utf-8;
location /api {
root /var/www/my-site.com/backend;
try_files $uri $uri/ /index.php$is_args$args;
}
location / {
root /var/www/my-site.com/frontend;
try_files $uri /index.html;
}
location ~* …Run Code Online (Sandbox Code Playgroud) 我正在构建一个应用程序,需要对 api-数据组合使用情况进行一些分析。下面是我的 nginx 配置 -
location /r/ {
rewrite /r/(.*)$ http://localhost:3000/sample/route1/$1 redirect;
post_action /aftersampleroute1/$1;
}
location /aftersampleroute1/ {
rewrite /aftersampleroute1/(.*) /stats/$1;
proxy_pass http://127.0.0.1:3000;
}
Run Code Online (Sandbox Code Playgroud)
location/r/用于将浏览器请求重定向http://localhost:80/r/quwjDP4us到 api /sample/route1/quwjDP4us,该 api 使用 idquwjDP4us执行某些操作。现在在后台我想将 id 传递quwjDP4us给统计 api/stats/quwjDP4us,该 api 会更新该 id 的数据库记录。
当我启动 nginx 并发出请求时,http://localhost:80/r/quwjDP4usnginx 成功将我的请求重定向到我的应用程序,但不会在后台向 stats api 发出第二个请求。我缺少什么?
注意 -post_action不包含在 nginx 文档中,是否有我可以使用的备用模块/指令?
我可以创建一个位置,该位置可以被 nginx 配置中的任何其他位置访问,但不能从外部直接访问吗?
我可以使用拒绝指令,但它也会拒绝访问 nginx 配置中定义的位置。
这是我的配置 -
server {
listen *:80;
server_name 127.0.0.1;
location = /auth {
set $query '';
if ($request_uri ~* "[^\?]+\?(.*)$") {
set $query $1;
}
# add_header X-debug-message "Parameters being passed $is_args$args" always;
proxy_pass http://127.0.0.1:8080/auth?$query;
}
location /kibana/ {
rewrite ^/kibana/(.*) /$1 break;
proxy_pass http://127.0.0.1:5601;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Real-IP $remote_addr;
proxy_cache_bypass $http_upgrade;
auth_request /auth;
}
location ~ (/app/|/app/kibana|/bundles/|/kibana4|/status|/plugins|/ui/|/api/|/monitoring/|/elasticsearch/) {
internal;
proxy_pass http://127.0.0.1:5601;
proxy_http_version …Run Code Online (Sandbox Code Playgroud) 我一直在为此苦苦挣扎,我开始变得沮丧......
我正在使用 Ubuntu 18.10 在 DigitalOcean 上运行 Droplet 。
我使用Docker来提供不同的服务(nuxt、socket.io、nginx、nodejs)
我已经使用Nginx来revese代理这些服务(起初我只想渲染 nuxt 应用程序)
执行时
docker-compose up --build -d
Run Code Online (Sandbox Code Playgroud)
所有进程都在运行并且可以在服务器上访问,但无法从我的本地计算机访问(我收到 504 网关超时)。
有一次我让它工作了,但是当添加一些位置规则时,它再次崩溃了。
这是我的nginx配置:
server {
listen 8080;
server_name 104.248.201.255;
location / {
proxy_pass http://doodlehelha-nuxt:3000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的docker-compose.yml中的 nginx 服务
nginx:
image: nginx:1.15
container_name: doodlehelha-nginx
ports:
- '8080:8080'
- '443:443'
expose:
- '8080'
volumes:
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- nuxt
- api
- socket
Run Code Online (Sandbox Code Playgroud)
这是一个非常简单的配置,这就是为什么我不知道出了什么问题......如果更有经验的人可以指出,我将非常感激。
nginx docker nginx-location nginx-reverse-proxy nginx-config
我注意到,当我使用 ubuntu 命令“nginx”启动 nginx 时,我会执行 systemctl status nginx。它表明 systemctl 被禁用。更重要的是,如果我首先使用命令 systemctl start nginx 启动 nginx,然后尝试使用命令 nginx 启动 nginx,它会检查端口的可用性,然后说 nginx: [emerg] 仍然无法绑定()。所以我认为他们的目的一定是不同的。当我使用命令 nginx strt nginx 时,停止 nginx 的唯一方法是强制使用killlall nginx或kill -9(进程ID)或清除端口。所以我很确定它们之间存在一些差异。
下面是我的配置,除了路由之外,我在定义的所有路由上都收到 404 well-known,我不明白为什么。
如果我向http://example.tech/connect发出请求,我会收到 404,如果我向http://api.example.tech发出请求,我也会收到 404。
我看不出我哪里出了问题,因为这看起来应该可行!
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
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;
error_log /var/log/nginx/error.log warn;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
#REMOVE REFERENCE TO FILES THAT HAVE "server" and "location" blocks in them so we can do it all in this file …Run Code Online (Sandbox Code Playgroud) 我正在使用 nginx(反应前端)提供静态文件。我为每个页面使用了不同的网址,例如 /login /user /home 。
我的 nginx 不会将这些重定向到我的 index.html 文件。
我做了一些更改,现在我也无法访问我的主页。它返回无法获取/。
这是我的 nginx.conf 文件。我在 Windows 上运行它。我的index.html 位于build 文件夹内。如何让我的nginx使用reactjs中的Router和Link,以便我可以通过引用链接或通过导航栏获取页面?
worker_processes 5;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name ip;
location / {
root /Users/username/projectfolder/build;
index index.html index.htm;
try_files $uri $uri/ index.html;
proxy_pass http://ipaddress:portnumber;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试过以下配置
server {
listen some_port;
server_name some_ip; …Run Code Online (Sandbox Code Playgroud) 有人熟悉 nginx 吗?我试图在流块中以有条件的方式启用 proxy_protocol,即对于某些端点,我希望添加代理协议标头。对于其他人我不想添加它。查看文档,proxy_protocol 无法获取变量(尝试了 map 指令) 关于如何实现此目的有什么建议吗?在这里添加了我的 nginx 配置。 http://nginx.org/en/docs/stream/ngx_stream_proxy_module.html#proxy_protocol
这是有问题的部分proxy_protocol $proxy_state;
map $ssl_preread_server_name $proxy_state{
default on;
facebook.com off;
}
server {
listen 8443 ;
resolver 8.8.8.8 ipv6=off;
proxy_pass $server;
proxy_protocol $proxy_state;
ssl_preread on;
}
Run Code Online (Sandbox Code Playgroud)
以下是完整的配置
error_log logs/error.log;
events {
}
stream {
map $ssl_preread_server_name $server {
# default 127.0.0.1:8080;
default unix:/var/run/nginx.sock;
include /home/user/allow_url_list;
}
map $ssl_preread_server_name $proxy_state{
default on;
facebook.com off;
}
server {
listen 8443 ;
resolver 8.8.8.8 ipv6=off;
proxy_pass $server;
proxy_protocol $proxy_state;
ssl_preread on;
} …Run Code Online (Sandbox Code Playgroud) nginx ×10
nginx-location ×10
nginx-config ×4
auth-request ×1
caching ×1
docker ×1
domain-name ×1
http-post ×1
linode ×1
nginx-cache ×1
proxy ×1
reactjs ×1
symfony ×1
webserver ×1