我想将我的 Web 服务器上的所有 http 请求重写为 https 请求,我从以下内容开始:
服务器 {
听80;
地点 / {
重写 ^(.*) https://mysite.com$1 永久;
}
...
一个问题是这会剥离任何子域信息(例如,node1.mysite.com/folder),我如何重写上述内容以将所有内容重新路由到 https 并维护子域?
我有一个运行 Nginx 的 docker 容器,它链接到另一个 docker 容器。第二个容器的主机名和 IP 地址在启动时作为环境变量加载到 Nginx 容器中,但在此之前不知道(它是动态的)。我希望我nginx.conf使用这些值 - 例如
upstream gunicorn {
server $APP_HOST_NAME:$APP_HOST_PORT;
}
Run Code Online (Sandbox Code Playgroud)
如何在启动时将环境变量添加到 Nginx 配置中?
编辑 1
这是整个文件,在下面的建议答案之后:
env APP_WEB_1_PORT_5000_TCP_ADDR;
# Nginx host configuration for django_app
# Django app is served by Gunicorn, running under port 5000 (via Foreman)
upstream gunicorn {
server $ENV{"APP_WEB_1_PORT_5000_TCP_ADDR"}:5000;
}
server {
listen 80;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location /static/ {
alias /app/static/;
}
location /media/ {
alias /app/media/;
}
location / {
proxy_pass http://gunicorn;
} …Run Code Online (Sandbox Code Playgroud) 我正在寻找对以下问题的过于简化的答案。我试图建立对 Nginx 如何与 Gunicorn 之类的东西一起工作的基本理解。
我是否需要 Nginx 和 Gunicorn 之类的东西才能在 Nginx 上部署 Django 应用程序?
如果是这样,实际处理 HTTP 请求的是什么?
附言。我不想使用 Apache 和 mod_wsgi!
Nginx 在端口 80 上运行,我使用它来反向代理 URL,并/foo以3200这种方式使用端口路径:
location /foo {
proxy_pass http://localhost:3200;
proxy_redirect off;
proxy_set_header Host $host;
}
Run Code Online (Sandbox Code Playgroud)
这工作正常,但我在 port 上有一个应用程序3200,我不希望将初始/foo值发送到该应用程序。也就是说 - 当我访问时http://localhost/foo/bar,我只想/bar成为应用程序接收到的路径。所以我尝试将此行添加到上面的位置块:
rewrite ^(.*)foo(.*)$ http://localhost:3200/$2 permanent;
Run Code Online (Sandbox Code Playgroud)
这会导致 302 重定向(更改 URL),但我想要 301。我该怎么办?
我在子域上有一个注册页面,例如: https://signup.example.com
它应该只能通过 HTTPS 访问,但我担心人们可能会以某种方式通过 HTTP 偶然发现它并获得 404。
我在 nginx 中的 html/server 块如下所示:
html {
server {
listen 443;
server_name signup.example.com;
ssl on;
ssl_certificate /path/to/my/cert;
ssl_certificate_key /path/to/my/key;
ssl_session_timeout 30m;
location / {
root /path/to/my/rails/app/public;
index index.html;
passenger_enabled on;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我可以添加什么以便去的人http://signup.example.com被重定向到https://signup.example.com?(仅供参考,我知道有些 Rails 插件可以强制使用,SSL但希望避免这种情况)
有没有办法在两个 nginxserver {}块之间共享配置指令?我想避免重复规则,因为我网站的 HTTPS 和 HTTP 内容使用完全相同的配置。
目前,它是这样的:
server {
listen 80;
...
}
server {
listen 443;
ssl on; # etc.
...
}
Run Code Online (Sandbox Code Playgroud)
我可以做一些类似的事情:
server {
listen 80, 443;
...
if(port == 443) {
ssl on; #etc
}
}
Run Code Online (Sandbox Code Playgroud) 如何设置 Access-Control-Allow-Origin 标头,以便我可以在主域上使用子域中的网络字体?
笔记:
您将在 HTML5BP 服务器配置项目https://github.com/h5bp/server-configs 中找到大多数 HTTP 服务器的此标头和其他标头的示例
我已将 Apache 配置为发回 200 响应,而不使用此配置行提供任何文件
Redirect 200 /hello
Run Code Online (Sandbox Code Playgroud)
我可以用 Nginx 做到这一点吗?我不想提供文件,我只希望服务器响应 200(我只是记录请求)。
我知道我可以添加一个索引文件并实现相同的目的,但是在配置中执行此操作意味着可能会出错的事情少了一件。
我需要重新加载我的 php.ini 并且帮助对话框中没有关于重新启动它的任何内容。