文章目录
本人亲测在本地虚拟机部署完毕,本地web程序通过Nginx进行跳转。
version: '3.1'
services:
nginx:
image: nginx # 镜像名称
container_name: nginx # 容器名字
restart: always # 开机自动重启
ports: # 端口号绑定(宿主机:容器内)
- '5080:80'
- '443:443'
volumes: # 目录映射(宿主机:容器内)
- ./conf/nginx.conf:/etc/nginx/nginx.conf###配置文件
- ./log:/var/log/nginx ###这里面放置日志
- ./html:/html ###这里面放置项目目录
mkdir conf log html
将其放置在./conf目录下。
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
#该ip是虚拟机地址,根据实际情况修改。
server_name 192.168.0.110;
location / {
# Nginx解决浏览器跨域问题
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers X-Requested-With;
add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,PATCH,OPTIONS;
root /html;
index index.html index.htm;
}
location /abc {
default_type text/plain;
return 200 "access success";
}
location /api {
# 填写需要跳转的API地址 ,根据实际情况修改。
proxy_pass http://192.168.0.3:8789/data;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# Nginx解决浏览器跨域问题
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers X-Requested-With;
add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,PATCH,OPTIONS;
}
}
}
以下nginx.conf配置说明:仅供参考,未验证。
配置影响 nginx 全局的指令。一般有运行 nginx 服务器的用户组、nginx 进程 pid 存放路径、日志存放路径、配置文件引入、允许生成 worker process 数等;
所有在 nginx.conf 内但不在任何 { } 中的指令都属于全局块的指令:
# 用户组
user myUsr myGroup;
# 工作进程数
worker_processes 1;
# 进程文件路径
pid /user/local/nginx/nginx.pid;
# 日志路径和日志级别
error_log logs/error.log debug;
配置影响 nginx 服务器或与用户的网络连接。有每个进程的最大连接数、选取哪种事件驱动模型处理连接请求、是否允许同时接受多个网路连接、开启多个网络连接序列化等;
所有写在 events{} 中的指令都属于 Events 块指令:
events {
# 设置网路连接序列化
accept_mutex on;
# 一个进程是否同时接受多个网络连接
multi_accept on;
# 事件驱动模型
use epoll;
# 最大连接数
worker_connections 1024;
}
select|poll|kqueue|epoll|resig|/dev/poll|eventport。 可以嵌套多个 server、配置代理、缓存、日志定义等绝大多数功能和第三方模块的配置。如文件引入、mime-type 定义、日志自定义、是否使用 sendfile 传输文件、连接超时时间、单连接请求数等;
所有写在 http{} 块中,但不写在 http{ } 内的子模块中的所有指定就是 HTTP 全局块,会影响 http{ } 及其子模块的内容:
http {
# 文件扩展名与文件类型映射表
include mime.types;
# 默认文件类型
default_type application/octet-stream;
# 是否开启服务日志
access_log off;
# 自定义服务日志格式
log_format myLogFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for';
# 设置日志的格式
access_log log/access.log myLogFormat;
# 是否开启高效文件传输模式
sendfile on;
# 每个进程每次最大传输值
sendfile_max_chunk 100k;
# 长连接超时时间
keeplive_timeout 100;
# 响应客户端的超时时间
send_timeout 75;
# 客户端请求头的区缓冲区大小
client_header_buffer_size 32k;
# 客户端请求头的最大缓冲区数量和大小
large_client_header_buffers 8 32k;
# 允许客户端请求的最大字节数
client_max_body_size 10m;
# 客户端请求体的缓冲区大小
client_body_buffer_size 128k;
}
http {
...
# 配置 https_proxy 反向代理
proxy_connect_timeout 75;
proxy_read_timeout 75;
proxy_send_timeout 100;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_max_temp_file_size 64k;
proxy_temp_file_write_size 64k;
proxy_temp_path proxy_temp;
...
}
http_proxy 模块指令详解:
http {
...
# 配置 http_gzip 模块
gzip on;
gzip_min_length 1K;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 6;
gzip_types text/plain text/css application/json;
gzip_proxied any;
gzip_vray on;
...
}
http_gzip 配置详解:
upstream backend {
server 192.168.56.10:8080 max_fails=2 fail_timeout=30s backup; # 热备
server 192.168.56.11:8080 max_fails=2 fail_timeout=30s;
}
配置虚拟主机的相关参数,一个 http 中可以有多个 server;
所有位于 server{} 模块中的指令都属于 Server 块指令:
server {
# 监听端口
listen 8080;
# 监听服务器地址
server_name 192.168.56.10;
# 每个连接请求上限次数
keepalive_requests 120;
# 字符集
charset utf-8;
# 服务日志所在目录以及日志格式
access_log logs/host80.log myLogFormat;
# 错误页
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
}
除了以上常用的 Server 块指令外还有其他特殊的指令,比如 ssl 模块,在请求方式中,如果使用 https 进行请求的话是需要证书,这时就要对 https 请求设置 ssl:
server {
# 开启 ssl
ssl on;
# ssl 证书路径
ssl_certificate /opt/ssl/nginx.crt;
# ssl 证书秘钥
ssl_certificate_key /opt/ssl/nginx.key;
# ssl 会话超时时间
ssl_session_timeout 1d;
# ssl 缓存
ssl_session_cache shared:SSL:50m;
# ssl 会话票据
ssl_session_tickets off;
# ssl 协议版本
ssl_protocols TLSv1.2;
# ssl 密码套件
ssl_ciphers 'HIGH:!aNULL:!MD5';
# 开启 ssl 服务密码套件
ssl_prefer_server_ciphers on;
}
配置请求的路由,以及各种页面的处理情况。
常用 location 指令:
location ~* ^.+$ {
# 服务器的默认网站根目录位置
root /var/www/html;
# 默认访问的文件名
index index.html index.htm index.jsp;
# 拒绝的 IP
deny 192.168.56.21;
deny all;
# 允许的 IP
allow 192.168.56.10;
allow all;
}
(可用于访问控制和处理跨域问题):
location {
# 设置允许跨域类型
add_header Access-Control-Allow-Origin * always;
# 是否允许信任证书
add_header Access-Control-Allow-Credentials 'true' always;
# 允许的请求头类型
add_header Access-Control-Allow-Headers * always;
# 设置允许的请求方式
add_header Access-Control-Allow-Methods 'PUT, GET, POST, DELETE, OPTIONS' always;
# 处理 OPTIONS 请求
if ($request_method = 'OPTIONS') {
return 204;
}
}
指令详解:
always ;location {
# 反向代理服务器地址
proxy_pass http://192.168.56.33;
# 是否重定向代理服务器地址
proxy_redirect off;
}
location {
# cookie
proxy_pass_header Set-Cookie;
# 主机名
proxy_set_header Host $host;
# 真实 IP
proxy_set_header X-Real-Ip $remote_addr;
# 表示 HTTP 请求端真实 IP
proxy_set_header X-Forwarded-For $remote_addr;
}
Nginx 配置的注释是以 # 开头,并且每条语句都要以 ; 结束,除了语句块 {}。
将其放置在./html目录下。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>docke-compose搭建nginx</title>
</head>
<body>
<h1>docke-compose搭建nginx映射成功</h1>
</body>
</html>
docker-compose up -d
其他命令参考
# 拉取工程中所有服务依赖的镜像
docker-compose pull
# 拉取工程中 nginx 服务依赖的镜像
docker-compose pull nginx
# 拉取镜像过程中不打印拉取进度信息
docker-compose pull -q
#查看日志
docker-compose logs nginx
# 重启工程中所有服务的容器
docker-compose restart
# 重启工程中指定服务的容器
docker-compose restart nginx
# 启动工程中所有服务的容器
docker-compose start
# 启动工程中指定服务的容器
docker-compose start nginx
# 停止工程中所有服务的容器
docker-compose stop
# 停止工程中指定服务的容器
docker-compose stop nginx
地址:http://你的虚拟机ip:5080

以下消息内容是自己编写的web程序,仅是示意。

我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po
我打算为ruby脚本创建一个安装程序,但我希望能够确保机器安装了RVM。有没有一种方法可以完全离线安装RVM并且不引人注目(通过不引人注目,就像创建一个可以做所有事情的脚本而不是要求用户向他们的bash_profile或bashrc添加一些东西)我不是要脚本本身,只是一个关于如何走这条路的快速指针(如果可能的话)。我们还研究了这个很有帮助的问题:RVM-isthereawayforsimpleofflineinstall?但有点误导,因为答案只向我们展示了如何离线在RVM中安装ruby。我们需要能够离线安装RVM本身,并查看脚本https://raw.github.com/wayn
我有一个奇怪的问题:我在rvm上安装了rubyonrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(
我刚刚为fedora安装了emacs。我想用emacs编写ruby。为ruby提供代码提示、代码完成类型功能所需的工具、扩展是什么? 最佳答案 ruby-mode已经包含在Emacs23之后的版本中。不过,它也可以通过ELPA获得。您可能感兴趣的其他一些事情是集成RVM、feature-mode(Cucumber)、rspec-mode、ruby-electric、inf-ruby、rinari(用于Rails)等。这是我当前用于Ruby开发的Emacs配置:https://github.com/citizen428/emacs
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e
我有一个在Linux服务器上运行的ruby脚本。它不使用rails或任何东西。它基本上是一个命令行ruby脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg
我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search
我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121
由于fast-stemmer的问题,我很难安装我想要的任何rubygem。我把我得到的错误放在下面。Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingfast-stemmer:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcreatingMakefilemake"DESTDIR="cleanmake"DESTDIR=