Skip to content

Instantly share code, notes, and snippets.

@jimothyGator
Last active October 1, 2024 21:57
Show Gist options
  • Save jimothyGator/5436538 to your computer and use it in GitHub Desktop.
Save jimothyGator/5436538 to your computer and use it in GitHub Desktop.
Nginx configuration for Mac OS X with Homebrew, using sites-enabled directory.
mkdir -p /usr/local/etc/nginx/sites-{enabled,available}
cd /usr/local/etc/nginx/sites-enabled
ln -s ../sites-available/default.conf
ln -s ../sites-available/default-ssl.conf

File locations:

  • nginx.conf to /usr/local/etc/nginx/
  • default.conf and default-ssl.conf to /usr/local/etc/nginx/sites-available
  • homebrew.mxcl.nginx.plist to /Library/LaunchDaemons/

Not documented yet:

  • How to create self-signed SSL certificates
  • How to start and stop Nginx
server {
listen 443;
server_name localhost;
ssl on;
ssl_certificate server.crt;
ssl_certificate_key server.key;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
}
server {
listen 80;
server_name localhost;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>homebrew.mxcl.nginx</string>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<false/>
<key>ProgramArguments</key>
<array>
<string>/usr/local/opt/nginx/sbin/nginx</string>
<string>-g</string>
<string>daemon off;</string>
</array>
<key>WorkingDirectory</key>
<string>/usr/local</string>
</dict>
</plist>
#user nobody;
worker_processes 1;
error_log /Library/Logs/nginx/error.log;
events {
worker_connections 1024;
}
http {
include 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 /Library/Logs/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
index index.html index.php;
upstream www-upstream-pool{
server unix:/tmp/php-fpm.sock;
}
include /etc/nginx/conf.d/*.conf;
include /usr/local/etc/nginx/sites-enabled/*.conf;
}
@victorguerra95
Copy link

@Schizo
Copy link

Schizo commented Mar 1, 2020

Hi, very new to nginx, how should I lunch nginx after setting up the mentioned files? Thanks for this gist!

@ajithkranatunga
Copy link

ajithkranatunga commented Mar 24, 2021

I replaced

error_log  /Library/Logs/nginx/error.log;
access_log  /Library/Logs/nginx/access.log  main;

with

error_log  /usr/local/var/log/nginx/nginx_error.log;
access_log  /usr/local/var/log/nginx/nginx_access.log  main;

since I needed to have the logs in a centralized location. Btw, just make sure to set the proper access permission to the files when configuring the log files.

@ajithkranatunga
Copy link

Hi, very new to nginx, how should I lunch nginx after setting up the mentioned files? Thanks for this gist!

sudo nginx

@james0r
Copy link

james0r commented Apr 19, 2021

Be aware that your /Library/Logs is appeared to be destroyed and recreated during a Time Machine Backup and possibly other types of migrations.

Your log files created there for nginx will need to be recreated.

@daqarash
Copy link

people always fail to inform others to edit /private/etc/hosts and add entries for the servers.

for example:

 127.0.0.1 localhost.sec1
 127.0.0.1 mywebsite.local.com

I used mkcert for registering local domains. I thought that was enough. It never came to my mind to edit the host file.
I spent many hours figuring out why I couldn't serve the new local domain.

Thank you so much 🙏

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment